Как да премахнете воден знак от TIFF, за да подобрите OCR

Имам куп некомпресирани битонални 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