Спасибо!
Я написал на багтрекере СТ (
http://sourceforge.net/tracker/?func=detail&aid=3489319&group_id=227253&atid=1070628, там и ссылка на образец, с которым я работаю), но не очень уверен, что это к чему-то приведет.
Поскольку я не знаю ни C, ни тем более C++ и ни разу в жизни не программировал на этих языках, то моя идея была абсолютно топорной: отключить выравнивание освещения в смешанном режиме (или даже вообще отключить), сделать версию без него и обрабатывать картинки сначала нормальной версией, а потом отключенной. С первого наскока не получилось. Нашел функцию grayRasterOp(), которая вроде бы и делает нужное, но ее отключение в normalizeIlluminationGray() приводит к кошмарным последствиям (неопределенным пятнам вместо текста и картинок). Вижу теперь после прочтения Вашего сообщения, что выравнивание освещения тесно связано с распознаванием картинок (никогда бы не подумал, что так может быть), но кошмар на выводе с этим не связан, поскольку зоны картинок определены вручную.
Видимо, надо пробовать дальше. Но делать это я могу исключительно методом тыка.
Добавлено: Вот первый результат, если его можно так назвать:
http://rghost.ru/36595321 Если закомментировать в RaiseAboveBackground несколько строчек, то удается избавиться от выравнивания освещения. Однако картинки при этом автоматически не распознаются, приходится выделять их руками. Более того, на вторую указанную "особенность" (пересвечивание текста между картинками) это не влияет, тут я совсем не понимаю, куда копать.
Вот патч к OutputGenerator.cpp:
Код: --- OutputGenerator.cpp.old 2012-02-19 00:25:05.000000000 -0600
+++ OutputGenerator.cpp 2012-02-19 03:04:36.000000000 -0600
@@ -100,12 +100,13 @@
static uint8_t transform(uint8_t src, uint8_t dst) {
// src: orig
// dst: background (dst >= src)
- if (dst - src < 1) {
- return 0xff;
- }
+// if (dst - src < 1) {
+// return 0xff;
+// }
unsigned const orig = src;
unsigned const background = dst;
- return static_cast<uint8_t>((orig * 255 + background / 2) / background);
+// return static_cast<uint8_t>((orig * 255 + background / 2) / background);
+ return static_cast<uint8_t>(orig);
}
};