Автор Тема: Модифицирование Scan Tailor  (Прочитано 69722 раз)

monday2000

  • Администратор
  • *****
  • Сообщений: 985
    • AOL клиент - -
    • Yahoo клиент - -
    • Просмотр профиля
    • Создание книг в электронном виде из бумажных книг (в формате DjVu)
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #45 : 09 Февраля 2013, 21:05:21 »
Новая сборка.

Добавил новую опцию:

Dont_Equalize_Illumination_Pic_Zones

Не применять выравнивание освещённости к зонам иллюстраций.

Опция - глобальная, оформлена в виде новой галки в окне Настройки. Влияет исключительно на процесс создания выводных "смешанных" сканов.

Возможный сценарий использования:

1. Сделать сканобработку как обычно.
2. Просмотреть сканы на стадии "Вывод", и те "смешанные" сканы, где образовались "пересвеченные" зоны иллюстраций, удалить физически из папки out.
3. Установить галку "Не выравнивать освещённость в зонах иллюстраций" в окне Инструменты - Настройки...
4. Запустить пакетную обработку всех сканов на стадии "Вывод" и уйти заниматься своими делами.

Вместо физического удаления можно применить любой иной способ воздействия на нужный выводной смешанный скан - с таким расчётом, чтобы на него выставился знак вопроса - и потом переобработать его. Но удалить, мне кажется, проще всего.

Опцию я сделал глобальной (а не постраничной) по 2 причинам:

1. Это очень редко нужный функционал. Я сколько лет книги сканирую - и у меня ни разу в ней нужды не возникало. А ведь, как говорит Tulon - "каждая новая галочка - это удар по простоте интерфейса".

2. Сделай я эту опцию постраничной, мне потребовалось бы ставить программно знак вопроса на соответствующий скан и записывать состояния опции в файл задания. Всё это - значительный геморрой, и для такой пустячной вещи это было бы слишком большие усилия с моей стороны.

Коды исправления:
//Dont_Equalize_Illumination_Pic_Zones

C:\build\scantailor_featured\SettingsDialog.h

class SettingsDialog : public QDialog
{
.......
public:
signals:
.......
void DontEqualizeIlluminationPicZonesSignal(bool state);
private slots:
.......
void OnCheckDontEqualizeIlluminationPicZones(bool);

C:\build\scantailor_featured\SettingsDialog.cpp

SettingsDialog::SettingsDialog(QWidget* parent)
......
{
......
ui.DontEqualizeIlluminationPicZones->setChecked(settings.value("settings/dont_equalize_illumination_pic_zones").toBool());
connect(ui.DontEqualizeIlluminationPicZones, SIGNAL(toggled(bool)), this, SLOT(OnCheckDontEqualizeIlluminationPicZones(bool)));
......

void
SettingsDialog::OnCheckDontEqualizeIlluminationPicZones(bool state)
{
QSettings settings;

settings.setValue("settings/dont_equalize_illumination_pic_zones", state);

emit DontEqualizeIlluminationPicZonesSignal(state);
}

C:\build\scantailor_featured\MainWindow.h

class MainWindow :
.......
public slots:
......
void DontEqualizeIlluminationPicZones(bool);
......
private:
......
bool m_dont_equalize_illumination_pic_zones;
}

C:\build\scantailor_featured\MainWindow.cpp

MainWindow::MainWindow()
......
m_dont_equalize_illumination_pic_zones = settings.value("settings/dont_equalize_illumination_pic_zones").toBool();
}

void
MainWindow::DontEqualizeIlluminationPicZones(bool state)
{
m_dont_equalize_illumination_pic_zones = state;
}

void
MainWindow::openSettingsDialog()
{
.....
connect(dialog, SIGNAL(DontEqualizeIlluminationPicZonesSignal(bool)), this, SLOT(DontEqualizeIlluminationPicZones(bool)));
dialog->show();
}

BackgroundTaskPtr
MainWindow::createCompositeTask(
.....
if (last_filter_idx >= m_ptrStages->outputFilterIdx()) {
output_task = m_ptrStages->outputFilter()->createTask(
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//page.id(), m_ptrThumbnailCache, m_outFileNameGen, batch, debug
page.id(), m_ptrThumbnailCache, m_outFileNameGen, batch, debug,
m_dont_equalize_illumination_pic_zones
//end of modified by monday2000
);
..........

C:\build\scantailor_featured\filters\output\Filter.h

class Filter : public AbstractFilter
{
.....
public:
.....
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//bool batch, bool debug);
bool batch, bool debug, bool dont_equalize_illumination_pic_zones=false); // "false" as cli workaround
//end of modified by monday2000

C:\build\scantailor_featured\filters\output\Filter.cpp

IntrusivePtr<Task>
Filter::createTask(
......
OutputFileNameGenerator const& out_file_name_gen,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//bool const batch, bool const debug)
bool const batch, bool const debug,
bool dont_equalize_illumination_pic_zones)
//end of modified by monday2000
{
......
new Task(
IntrusivePtr<Filter>(this), m_ptrSettings,
thumbnail_cache, page_id, out_file_name_gen,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//lastTab, batch, debug
lastTab, batch, debug, dont_equalize_illumination_pic_zones
//end of modified by monday2000
)
);
}

C:\build\scantailor_featured\filters\output\Task.h

class Task : public RefCountable
{
......
public:
Task(IntrusivePtr<Filter> const& filter,
......
PageId const& page_id, OutputFileNameGenerator const& out_file_name_gen,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//ImageViewTab last_tab, bool batch, bool debug);
ImageViewTab last_tab, bool batch, bool debug, bool dont_equalize_illumination_pic_zones);
//end of modified by monday2000

......

FilterResultPtr process(
TaskStatus const& status, FilterData const& data,
QPolygonF const& content_rect_phys);
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
bool m_dont_equalize_illumination_pic_zones;
//end of modified by monday2000

C:\build\scantailor_featured\filters\output\Task.cpp

Task::Task(IntrusivePtr<Filter> const& filter,
.......
PageId const& page_id, OutputFileNameGenerator const& out_file_name_gen,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//ImageViewTab const last_tab, bool const batch, bool const debug)
ImageViewTab const last_tab, bool const batch, bool const debug,
bool dont_equalize_illumination_pic_zones)
//end of modified by monday2000
: m_ptrFilter(filter),
........
m_batchProcessing(batch),
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//m_debug(debug)
m_debug(debug),
m_dont_equalize_illumination_pic_zones(dont_equalize_illumination_pic_zones)
//end of modified by monday2000
{
if (debug) {
......

FilterResultPtr
Task::process(
.....
if (need_reprocess) {
// Even in batch processing mode we should still write automask, because it
.....
out_img = generator.process(
......
params.depthPerception(),
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
m_dont_equalize_illumination_pic_zones,
//end of modified by monday2000
write_automask ? &automask_img : 0,
.....

C:\build\scantailor_featured\filters\output\OutputGenerator.h

class OutputGenerator
{
public:
.....
QImage process(
TaskStatus const& status, FilterData const& input,
.....
DepthPerception const& depth_perception,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
bool dont_equalize_illumination_pic_zones,
//end of modified by monday2000
imageproc::BinaryImage* auto_picture_mask = 0,
......

private:
QImage processImpl(
TaskStatus const& status, FilterData const& input,
......
DepthPerception const& depth_perception,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
bool dont_equalize_illumination_pic_zones,
//end of modified by monday2000
imageproc::BinaryImage* auto_picture_mask = 0,
......

QImage processWithoutDewarping(
TaskStatus const& status, FilterData const& input,
ZoneSet const& picture_zones, ZoneSet const& fill_zones,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
bool dont_equalize_illumination_pic_zones,
//end of modified by monday2000
imageproc::BinaryImage* auto_picture_mask = 0,
.......

QImage processWithDewarping(
TaskStatus const& status, FilterData const& input,
.......
DepthPerception const& depth_perception,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
bool dont_equalize_illumination_pic_zones,
//end of modified by monday2000
imageproc::BinaryImage* auto_picture_mask = 0,
......

static imageproc::GrayImage normalizeIlluminationGray(
......
QTransform const& xform, QRect const& target_rect,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
QImage& original_image,
//end of modified by monday2000
imageproc::GrayImage* background = 0, DebugImages* dbg = 0);
.........

C:\build\scantailor_featured\filters\output\OutputGenerator.cpp

template<typename MixedPixel>
void combineMixed(
QImage& mixed, BinaryImage const& bw_content,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//BinaryImage const& bw_mask)
BinaryImage const& bw_mask,
//added:
QImage& original_image,
bool dont_equalize_illumination_pic_zones
)
//end of modified by monday2000
{
.....

uint32_t const msb = uint32_t(1) << 31;
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
uchar* original_image_line = original_image.bits();
int const original_image_stride = original_image.bytesPerLine();
//end of modified by monday2000

for (int y = 0; y < height; ++y) {
.....
} else {
// Non-B/W content.
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//mixed_line[x] = reserveBlackAndWhite<MixedPixel>(mixed_line[x]);
if (dont_equalize_illumination_pic_zones)
mixed_line[x] = reserveBlackAndWhite<MixedPixel>(original_image_line[x]);
else
mixed_line[x] = reserveBlackAndWhite<MixedPixel>(mixed_line[x]);
//end of modified by monday2000
}
.....
bw_mask_line += bw_mask_stride;
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
original_image_line += original_image_stride;
//end of modified by monday2000
}
......

QImage
OutputGenerator::process(
TaskStatus const& status, FilterData const& input,
......
DepthPerception const& depth_perception,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
bool dont_equalize_illumination_pic_zones,
//end of modified by monday2000
imageproc::BinaryImage* auto_picture_mask,
......
QImage image(
processImpl(
status, input, picture_zones, fill_zones,
dewarping_mode, distortion_model, depth_perception,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
dont_equalize_illumination_pic_zones,
//end of modified by monday2000
auto_picture_mask, speckles_image, dbg
........

GrayImage
OutputGenerator::normalizeIlluminationGray(
.......
QTransform const& xform, QRect const& target_rect,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
QImage& original_image,
//end of modified by monday2000
GrayImage* background, DebugImages* const dbg)
{
.......
if (dbg) {
dbg->add(to_be_normalized, "to_be_normalized");
}
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
original_image = to_be_normalized;
//end of modified by monday2000
status.throwIfCancelled();
.....

QImage
OutputGenerator::processImpl(
TaskStatus const& status, FilterData const& input,
......
DepthPerception const& depth_perception,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
bool dont_equalize_illumination_pic_zones,
//end of modified by monday2000
imageproc::BinaryImage* auto_picture_mask,
......
return processWithDewarping(
status, input, picture_zones, fill_zones,
dewarping_mode, distortion_model, depth_perception,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
dont_equalize_illumination_pic_zones,
//end of modified by monday2000
auto_picture_mask, speckles_image, dbg
........
return processWithoutDewarping(
status, input, picture_zones, fill_zones,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
dont_equalize_illumination_pic_zones,
//end of modified by monday2000
auto_picture_mask, speckles_image, dbg
.......

QImage
OutputGenerator::processWithoutDewarping(
TaskStatus const& status, FilterData const& input,
ZoneSet const& picture_zones, ZoneSet const& fill_zones,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
bool dont_equalize_illumination_pic_zones,
//end of modified by monday2000
imageproc::BinaryImage* auto_picture_mask,
........

normalize_illumination_crop_area.translate(-normalize_illumination_rect.topLeft());

//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
QImage original_image;
//end of modified by monday2000

if (render_params.normalizeIllumination()) {
maybe_normalized = normalizeIlluminationGray(
status, input.grayImage(), orig_image_crop_area,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//m_xform.transform(), normalize_illumination_rect, 0, dbg
m_xform.transform(), normalize_illumination_rect, original_image, 0, dbg
//end of modified by monday2000
);
.......

if (maybe_normalized.format() == QImage::Format_Indexed8) {
combineMixed<uint8_t>(
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//maybe_normalized, bw_content, bw_mask
maybe_normalized, bw_content, bw_mask,
original_image,
dont_equalize_illumination_pic_zones
//end of modified by monday2000
);
} else {
assert(maybe_normalized.format() == QImage::Format_RGB32
|| maybe_normalized.format() == QImage::Format_ARGB32);

combineMixed<uint32_t>(
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//maybe_normalized, bw_content, bw_mask
maybe_normalized, bw_content, bw_mask,
original_image,
dont_equalize_illumination_pic_zones
//end of modified by monday2000
);
.........

QImage
OutputGenerator::processWithDewarping(
TaskStatus const& status, FilterData const& input,
.......
DepthPerception const& depth_perception,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
bool dont_equalize_illumination_pic_zones,
//end of modified by monday2000
imageproc::BinaryImage* auto_picture_mask,
......

) * m_xform.transformBack()
);

//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
QImage original_image;
//end of modified by monday2000

if (!render_params.normalizeIllumination()) {
......
warped_gray_output = normalizeIlluminationGray(
status, input.grayImage(), orig_image_crop_area,
m_xform.transform(), normalize_illumination_rect,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
original_image,
//end of modified by monday2000
&warped_gray_background, dbg
.......
if (dewarped.format() == QImage::Format_Indexed8) {
combineMixed<uint8_t>(
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//dewarped, dewarped_bw_content, dewarped_bw_mask
dewarped, dewarped_bw_content, dewarped_bw_mask,
original_image,
dont_equalize_illumination_pic_zones
//end of modified by monday2000
);
} else {
assert(dewarped.format() == QImage::Format_RGB32
|| dewarped.format() == QImage::Format_ARGB32);

combineMixed<uint32_t>(
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//dewarped, dewarped_bw_content, dewarped_bw_mask
dewarped, dewarped_bw_content, dewarped_bw_mask,
original_image,
dont_equalize_illumination_pic_zones
//end of modified by monday2000
);
.......


Сборка от 2013.02.09:  http://rghost.ru/43674111

monday2000

  • Администратор
  • *****
  • Сообщений: 985
    • AOL клиент - -
    • Yahoo клиент - -
    • Просмотр профиля
    • Создание книг в электронном виде из бумажных книг (в формате DjVu)
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #46 : 10 Февраля 2013, 22:26:56 »
Я нашёл ошибку в новой опции Dont_Equalize_Illumination_Pic_Zones.

Ошибка выразилась в том, что при включённом деворпинге и установленной галке "Не выравнивать освещённость в зонах иллюстраций" изображение в зонах заметно смещалось. Ошибку исправил.

Коды исправления:
C:\build\scantailor_featured\filters\output\OutputGenerator.cpp

OutputGenerator::processWithoutDewarping(
......

//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
QImage maybe_normalized_Dont_Equalize_Illumination_Pic_Zones = transform(
input.origImage(), m_xform.transform(),
normalize_illumination_rect, OutsidePixels::assumeColor(Qt::white)
);
//end of modified by monday2000

if (maybe_normalized.format() == QImage::Format_Indexed8) {
combineMixed<uint8_t>(
maybe_normalized, bw_content, bw_mask,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
maybe_normalized_Dont_Equalize_Illumination_Pic_Zones,
dont_equalize_illumination_pic_zones
//end of modified by monday2000
);
} else {
assert(maybe_normalized.format() == QImage::Format_RGB32
|| maybe_normalized.format() == QImage::Format_ARGB32);

combineMixed<uint32_t>(
maybe_normalized, bw_content, bw_mask,
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
maybe_normalized_Dont_Equalize_Illumination_Pic_Zones,
dont_equalize_illumination_pic_zones
//end of modified by monday2000
);
}
}
......

OutputGenerator::processWithDewarping(
......

) * m_xform.transformBack()
);

//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
QImage normalized_original_Dont_Equalize_Illumination_Pic_Zones;

if (color_original) {
normalized_original_Dont_Equalize_Illumination_Pic_Zones
= convertToRGBorRGBA(input.origImage());
} else {
normalized_original_Dont_Equalize_Illumination_Pic_Zones = input.grayImage();
}
//end of modified by monday2000

if (!render_params.normalizeIllumination()) {
.......

dbg->add(dewarped, "dewarped");
}

//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:

QImage dewarped_Dont_Equalize_Illumination_Pic_Zones;
try {
dewarped_Dont_Equalize_Illumination_Pic_Zones = dewarp(
QTransform(), normalized_original_Dont_Equalize_Illumination_Pic_Zones,
m_xform.transform(),
distortion_model, depth_perception, bg_color
);
} catch (std::runtime_error const&) {
// Probably an impossible distortion model.  Let's fall back to a trivial one.
setupTrivialDistortionModel(distortion_model);
dewarped_Dont_Equalize_Illumination_Pic_Zones = dewarp(
QTransform(), normalized_original_Dont_Equalize_Illumination_Pic_Zones,
m_xform.transform(),
distortion_model, depth_perception, bg_color
);
}
normalized_original_Dont_Equalize_Illumination_Pic_Zones = QImage(); // Save memory.

//end of modified by monday2000

status.throwIfCancelled();
.....

if (dewarped.format() == QImage::Format_Indexed8) {
combineMixed<uint8_t>(
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//dewarped, dewarped_bw_content, dewarped_bw_mask
dewarped, dewarped_bw_content, dewarped_bw_mask,
dewarped_Dont_Equalize_Illumination_Pic_Zones,
dont_equalize_illumination_pic_zones
//end of modified by monday2000
);
} else {
assert(dewarped.format() == QImage::Format_RGB32
|| dewarped.format() == QImage::Format_ARGB32);

combineMixed<uint32_t>(
//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//dewarped, dewarped_bw_content, dewarped_bw_mask
dewarped, dewarped_bw_content, dewarped_bw_mask,
dewarped_Dont_Equalize_Illumination_Pic_Zones,
dont_equalize_illumination_pic_zones
//end of modified by monday2000
);
}
}

//begin of modified by monday2000
//Dont_Equalize_Illumination_Pic_Zones
//added:
dewarped_Dont_Equalize_Illumination_Pic_Zones = QImage(); // Save memory.
//end of modified by monday2000

applyFillZonesInPlace(dewarped, fill_zones, orig_to_output);
......

Сборка от 2013.02.10  http://rghost.ru/43703897
« Последнее редактирование: 10 Февраля 2013, 22:30:02 от monday2000 »

monday2000

  • Администратор
  • *****
  • Сообщений: 985
    • AOL клиент - -
    • Yahoo клиент - -
    • Просмотр профиля
    • Создание книг в электронном виде из бумажных книг (в формате DjVu)
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #47 : 11 Февраля 2013, 21:20:44 »
Я нашёл ошибку в экспорте субсканов. Ошибка возникает при экспорте одиночных сканов - в отличие от случая сдвоенной страницы - выдаётся сообщение об ошибке "не найден файл ...L" (левый).

Код исправления:
C:\build\scantailor_featured\MainWindow.cpp

MainWindow::ExportOutput(QString export_dir_path, bool default_out_dir, bool split_subscans)
{
.......
switch (page_id.subPage())
{
case PageId::SINGLE_PAGE:
erase_variations.push_back(PageId::SINGLE_PAGE);
break;
case PageId::LEFT_PAGE:
erase_variations.push_back(PageId::LEFT_PAGE);
break;
case PageId::RIGHT_PAGE:
erase_variations.push_back(PageId::RIGHT_PAGE);
break;
}
......
Сборка 2013.02.11  http://rghost.ru/43726244
« Последнее редактирование: 11 Февраля 2013, 21:24:44 от monday2000 »

monday2000

  • Администратор
  • *****
  • Сообщений: 985
    • AOL клиент - -
    • Yahoo клиент - -
    • Просмотр профиля
    • Создание книг в электронном виде из бумажных книг (в формате DjVu)
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #48 : 16 Февраля 2013, 18:14:55 »
Я залил последнюю сборку на https://sourceforge.net/projects/scantailor/files/scantailor-devel/featured/

yuree

  • Постоялец
  • ***
  • Сообщений: 172
    • Просмотр профиля
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #49 : 16 Февраля 2013, 18:42:01 »
А почему нельзя было выдрать механизм из сборки ScanTailorPlus-0.9.11[32bit]-2012-03-06-install → http://sourceforge.net/projects/scantailor/files/scantailor-devel/plus/ а городить свой?
Это я по поводу "автовыравнивания" проблемных сканов, там где фото до самых краёв. 
Поставил галку — выравнивает. Убрал — нет. Надёжный механизм работы с марта 2012-го года)

monday2000

  • Администратор
  • *****
  • Сообщений: 985
    • AOL клиент - -
    • Yahoo клиент - -
    • Просмотр профиля
    • Создание книг в электронном виде из бумажных книг (в формате DjVu)
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #50 : 17 Февраля 2013, 21:48:08 »
yuree
Цитировать
А почему нельзя было выдрать механизм из сборки ScanTailorPlus
http://forum.ru-board.com/topic.cgi?forum=5&topic=32945&start=1360#12
Цитировать
Попробуйте ветку Plus: это именно то, над чем работал DikBSD, когда добавил флажок, позволяющий отключить выравнивание освещения в смешанном режиме. Но результат Вас, возможно, разочарует, поскольку, как тогда объяснил Tulon, алгоритм определения зон предполагает, что освещение уже выровнено, и если этот этап пропустить, то конфигурация зон может оказаться довольно странной.
http://forum.ru-board.com/topic.cgi?forum=5&topic=32945&start=1360#14
Цитировать
Возможность не выравнивать освещение в смешанном режиме была добавлена в ветке Plus, но нынешняя реализация представляет собой скорее хак, чем настоящее решение, поскольку зоны в этом случае определяются вкривь и вкось.
В ветке Plus выравнивание освещения для mixed просто отключается и всё. Я же сделал по-другому: у меня оно не отключается, а просто изображение содержимого зон берётся из исходного изображения, не подвергавшемуся выравниванию освещённости.

Т.е. вместо отключения я использую подмену.
« Последнее редактирование: 17 Февраля 2013, 21:51:15 от monday2000 »

yuree

  • Постоялец
  • ***
  • Сообщений: 172
    • Просмотр профиля
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #51 : 18 Февраля 2013, 01:40:45 »
Спасибо за развёрнутый ответ.
Простите за навязчивость, но Вы не хотите в свою разработку добавить режим "rectangular" от Петра Ковара (Petr Kovar)? Я пользовался (и пользуюсь) некоторыми сборками с этой функцией и скажу Вам, это весьма полезный "бонус") для всех тех кто занимается оцифровкой книг и журналов.
Ctrl это конечно довольно хорошо, но вот, буквально сейчас загрузил скан (там где фото до краёв) в Ваш последний билд и нажал Ctrl, выделилась прямоугольная зона. Но при увеличении можно было наблюдать что всё равно не была захвачена вся область, пришлось опять двигать точки. Да, к тому же, ректангуляр не позволит по два раза "играться" с одной и той же страницей. Сначала ждать как выведется в микседе, потом жать Ctrl и доводить по краям. А это время)
Говорю это потому что в худ. альбомах и журналах такие страницы далеко не редкость. На собственной шкуре это испытал)

С уважением — Юрий 

monday2000

  • Администратор
  • *****
  • Сообщений: 985
    • AOL клиент - -
    • Yahoo клиент - -
    • Просмотр профиля
    • Создание книг в электронном виде из бумажных книг (в формате DjVu)
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #52 : 18 Февраля 2013, 22:37:17 »
yuree
Цитировать
Простите за навязчивость, но Вы не хотите в свою разработку добавить режим "rectangular" от Петра Ковара (Petr Kovar)?
Я планирую сделать свой аналог, т.к. та опция полезна, но сделана слишком уж топорно.

Артур Васильев

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Модифицирование Scan Tailor
« Ответ #53 : 19 Февраля 2013, 19:37:09 »
Спасибо, monday2000.
Попробовал - вроде штука хорошая. Но обнаружил что при автосохранении скорость обработки на моем компе уменьшается втрое-четверо. Вот и решил написать: Нельзя ли автосохранение делать не каждом файле, а скажем каждые 7 минут?

Пользуясь случаем, озвучу свои наивные пожелания. Понимая что это вероятно непосильно )

• Scan Teilor грузит процессор, запустишь две копии и приходится ждать когда он завершит этапы. И попутная работа - Фотошоп и т.д. - тормозится. К тому же по какой-то причине Scan Teilor грузит не более 50% процессора (у меня двуядерный). В общем я нашел такое решение - всем копиям Scan Teilor присваиваю низкий приоритет и жизнь налаживается. А если бы такая кнопка была на самом Scan Teilor - было бы просто суперски. Например увеличить приоритет на стадии распознавания ПО.

• Существенно ускоряет работу хорошее представление эскизов, не надо щелкать каждую страницу. На широкоэкранном мониторе можно было бы эту область сделать пошире.

Как-то так. Впрочем уже приспособился и без этого. Но был бы рад улучшениям )

yuree

  • Постоялец
  • ***
  • Сообщений: 172
    • Просмотр профиля
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #54 : 19 Февраля 2013, 21:14:57 »
Я планирую сделать свой аналог, т.к. та опция полезна, но сделана слишком уж топорно.

Это приятное известие.
© "Будем ждать.")

monday2000

  • Администратор
  • *****
  • Сообщений: 985
    • AOL клиент - -
    • Yahoo клиент - -
    • Просмотр профиля
    • Создание книг в электронном виде из бумажных книг (в формате DjVu)
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #55 : 19 Февраля 2013, 21:42:11 »
Артур Васильев
Цитировать
Пользуясь случаем, озвучу свои наивные пожелания. Понимая что это вероятно непосильно )
Совершенно верно. Мне это не под силу.
Цитировать
Существенно ускоряет работу хорошее представление эскизов, не надо щелкать каждую страницу. На широкоэкранном мониторе можно было бы эту область сделать пошире.
Всё эти потери времени - полная ерунда на фоне главных потерь - бесполезный авто-dewarping и корявые автозоны. Я как-то попробовал одну книжку обработать и сделать dewarping вручную на каждой странице, чтобы полностью убрать искривление. Так я 2 недели потратил - и дошёл только до середины книги. :) Так что я буду этими проблемами заниматься.

yuree

  • Постоялец
  • ***
  • Сообщений: 172
    • Просмотр профиля
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #56 : 19 Февраля 2013, 23:39:41 »
Всё эти потери времени - полная ерунда на фоне главных потерь - бесполезный авто-dewarping и корявые автозоны. Я как-то попробовал одну книжку обработать и сделать dewarping вручную на каждой странице, чтобы полностью убрать искривление. Так я 2 недели потратил - и дошёл только до середины книги. :) Так что я буду этими проблемами заниматься.

А вообще, насколько реально запихнуть автодеварпинг от Букресторера? Помню Вы на руборде в этом смысле что-то говорили, в шуточном ключе, конечно если я понял верно Ваше сообщение. Насколько это реально?
Вот, посмотрел на dll'шки из папки Plug-Ins. Там что, в самом деле нет защиты от редактирования?

monday2000

  • Администратор
  • *****
  • Сообщений: 985
    • AOL клиент - -
    • Yahoo клиент - -
    • Просмотр профиля
    • Создание книг в электронном виде из бумажных книг (в формате DjVu)
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #57 : 20 Февраля 2013, 21:46:50 »
yuree
Пока не могу сказать ничего определенного.

monday2000

  • Администратор
  • *****
  • Сообщений: 985
    • AOL клиент - -
    • Yahoo клиент - -
    • Просмотр профиля
    • Создание книг в электронном виде из бумажных книг (в формате DjVu)
    • E-mail
Re: Модифицирование Scan Tailor
« Ответ #58 : 11 Марта 2013, 22:57:38 »
Сборка Scan Tailor Featured 2013.03.11

http://rghost.ru/44433165

Исправлен баг опции Picture_Shape, который в своё время исправил автор Scan Tailor Plus.

otona.onnanoko

  • Новичок
  • *
  • Сообщений: 6
    • ICQ клиент - 328300195
    • Просмотр профиля
Re: Модифицирование Scan Tailor
« Ответ #59 : 12 Марта 2013, 01:28:24 »
monday2000
Здравствуйте. В темке 2-летней давности, где поднимались вопросы недостатков ST, упоминалось отсутствие ластика.
Раз вы занимаетесь улучшением ST, есть ли у вас возможность добавить к функциям ластик?