Как удалить водяной знак из TIFF, чтобы улучшить распознавание текста

У меня есть куча несжатых двухтональных изображений документов TIF. Все они имеют водяной знак посередине. Когда я запускаю их через OCR, текст, который перекрывает водяной знак, не распознается. Я пытаюсь понять, могу ли я применить какую-либо очистку, чтобы удалить эти водяные знаки, чтобы иметь возможность распознавать отсутствующий текст.

Опять же, изображения черно-белые, но когда вы смотрите на водяной знак, он кажется серым, поскольку он имеет узор из черно-белых пикселей, который делает буквы водяного знака менее «плотными», чем обычный текст. В то же время буквы водяного знака очень большие, намного больше, чем обычный текст.

Примером несколько похожего изображения является это (кроме это цвет, а символы водяного знака в моем случае намного толще и больше; мои водяные знаки также намного короче: всего 3-4 буквы)

Кажется, что может быть какой-то фильтр очистки, который был бы похож на удаление больших черных рамок с изображения, за исключением того, что границы обычно «плотнее», чем водяной знак, поэтому они кажутся «более черными».

В моем распоряжении 3 инструмента: GIMP, ImageMagick и IrfanView. Можете ли вы порекомендовать какие-либо конкретные функции какого-либо подмножества этих инструментов, которые могут мне помочь?


person I Z    schedule 08.03.2013    source источник
comment
Является ли водяной знак примечанием (например, «конфиденциально», «черновик» и т. д.) или он специально предназначен для того, чтобы запутать OCR («оценочная копия» и т. д.)?   -  person halfer    schedule 08.03.2013
comment
Хорошо, кулио. Если вы увеличите яркость и контрастность (с помощью Gimp или IM), то серые артефакты могут исчезнуть, а черный останется.   -  person halfer    schedule 08.03.2013
comment
Спасибо, но я думаю, что и яркость, и контраст работают с оттенками серого или цветными изображениями. Мне нужно, чтобы изображение было черно-белым. То есть я могу очистить в несколько шагов и в какой-то момент превратить изображение в оттенки серого, но конечный результат должен быть ч/б. Я немного поигрался с яркостью и контрастностью и не думаю, что они помогут. По крайней мере, не сами по себе.   -  person I Z    schedule 08.03.2013
comment
Преобразовать в оттенки серого, внести коррективы, преобразовать обратно в монохромный? :) Я совершенно уверен, что это будет работать в общем случае, хотя YMWV, как всегда.   -  person halfer    schedule 08.03.2013


Ответы (1)


Игра с контрастом и т.д. не помогла, но я нашел другой способ. Как указано выше, обычный текст намного «плотнее», чем текст водяного знака, а это означает, что обычный черный пиксель имеет больше окружающих черных пикселей, чем черный пиксель водяного знака. Поэтому я разработал простой оконный алгоритм фильтрации и пороговой обработки.

Вот как я сделал это в Matlab, используя окно 5X5:

im=imread('imageWithWmark.tif');
imInv = ~im;
nr=size(imInv,1);
nc=size(imInv,2);

d = 2;  % for 5X5 window
counts = zeros(nr,nc);
for rr = d+1 : nr-d-1
for cc = d+1 : nc-d-1
    counts(rr,cc) = nnz(imInv(rr-d:rr+d,cc-d:cc+d));
end
end

thresh=10;  % 10 out of 25 -- the larger the thresh the thinner the resulting letters are
imThresh = (counts>=thresh) & imInv;
imwrite(~imThresh,sprintf('Thresh_%d.tif',thresh),'Compression','none','Resolution',300);

Конечно, размер окна, порог и другие параметры зависят от параметров обычного текста на странице (буквы крупнее/мельче, толще/тоньше и т.д.), но даже этот первоначальный вариант работал вполне прилично.

person I Z    schedule 08.03.2013