Как вернуть несколько изображений в качестве выходных результатов по циклу for функции в основную - PullRequest
0 голосов
/ 27 марта 2019

Я хочу получить все результаты изображения сегментированных линий из моих функций в основную, но она возвращает только последнюю строку входного изображения.

Вот функция для кода сегментации линии:

function mat5 = charextract(ipimg)
%%%aa=imread('num_ip.tif');
bb=rgb2gray(ipimg);
cc=imbinarize(bb);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%   SEGMENTATION    %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[x,y]=size(cc);
ee=sum(cc,2);
mat2=y-ee;
mat3=mat2~=0;
mat4=diff(mat3);
index1=find(mat4);
[q,w]=size(index1);%size of index2 matrix is q*w
kap=1;
lam=1;
while kap<((q/2)+1)%number of loops=number of lines
      k=1;
      mat5=([]);
      for j=(index1(lam)+1):1:index1(lam+1)
         mat5(k,:)=cc(j,:); %store the line segmented matrix
         %aadd{j}=mat5(k,:);
         k=k+1;
      end
        lam=lam+2;   
        kap=kap+1;
        %aa=mat5+1;
        %figure, imshow(mat5);
end
end

Вот основной код:

close all;
clear all;
clc;
img=imread('num_ip.tif');
img2=charextract(img);
imshow(img2);

1 Ответ

0 голосов
/ 27 марта 2019

Проблема в том, что вы очищаете контейнер mat5 каждый раз, когда выполняется цикл while. Если вы переместите его из цикла while, это должно решить проблему.

Edit: K также устанавливается в 1 каждый раз, когда выполняется цикл while. Это означает, что после первой итерации цикла for. K будет равно 1 k=1 и перезапишет ваши предыдущие данные.

function mat5 = charextract(ipimg)
%%%aa=imread('num_ip.tif');
bb=rgb2gray(ipimg);
cc=imbinarize(bb);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%   SEGMENTATION    %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[x,y]=size(cc);
ee=sum(cc,2);
mat2=y-ee;
mat3=mat2~=0;
mat4=diff(mat3);
index1=find(mat4);
[q,w]=size(index1);%size of index2 matrix is q*w
kap=1;
lam=1;
mat5=([]); % moved out of while loop
k=1;

while kap<((q/2)+1)%number of loops=number of lines

      for j=(index1(lam)+1):1:index1(lam+1)
         mat5(k,:)=cc(j,:); %store the line segmented matrix
         %aadd{j}=mat5(k,:);
         k=k+1;
      end
        lam=lam+2;   
        kap=kap+1;
        %aa=mat5+1;
        %figure, imshow(mat5);
end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...