Линейно-матричный код в Matlab - PullRequest
0 голосов
/ 11 февраля 2011
function [fl re]=lines(im_text)  
%# Divide text in lines  
im_text=clip(im_text);  
num_filas=size(im_text,1);  
for s=1:num_filas  
    if sum(im_text(s,:))==0  
        nm=im_text(1:s-1, :); %# First line matrix  
        rm=im_text(s:end, :);%# Remain line matrix  
        fl = clip(nm);  
        re=clip(rm);  
        %#result  
        break  
    else  
        fl=im_text;%#Only one line.  
        re=[ ];  
    end  
end  
function img_out=clip(img_in)  
[f c]=find(img_in);  
img_out=img_in(min(f):max(f),min(c):max(c));%#Crops image  

Может ли кто-нибудь предоставить объяснение этого кода и как я могу обобщить и упростить его без изменения функции, которую он выполняет? Как я могу реализовать тот же алгоритм, не делая его функцией самостоятельно. добавив это в другой код. спасибо

1 Ответ

1 голос
/ 11 февраля 2011

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

Вы можете упростить его до

cutRowIdx = find(all(~im_text,2),1,'first');
topPart = clip(im_text(1:cutRowIdx-1,:)); 
bottomPart = clip(im_text(cutRowIdx:end,:));

Поместите clip в качестве подфункции в вашу функцию или превратите ее в отдельную функцию и вставьте в свой путь

...