[討論] 用遞迴寫 connected component labeling

看板MATLAB作者 (12163)時間11年前 (2013/06/08 22:40), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/1
小弟因為要寫成硬體,無法使用bwlabel 所以把函式寫開 問題一 在寫這個程式時,它一直跑出 Error in search (line 21) if(A(i-1,j-1)==1) 小弟看了很久一直找不出來,請問有人能幫我看一下嗎,感謝 A是二質化後的矩陣 B是要標記放的矩陣 以下是我的程式碼 %%%%% img=imread('C:\Users\user\Desktop\recursive connected components\TC-IDL-0830.jpg'); im_g=rgb2gray(img); umb=graythresh(im_g); A=im2bw(im_g,umb); [A1,A2,A3]=size(A); B=zeros(A1,A2); lab=0; for i=1:A1 for j=1:A2 if(A(i,j)==1) lab=lab+1; B=search(A,B,lab,i,j,A1,A2); end end end function [B]=search(A,B,lab,i,j,A1,A2) B(i,j)=lab; if(i-1<=0) i-1==1; end if(j-1<=0) j-1==1; end if(i+1>A1) i+1==A1; end if(j+1>A2) j+1==A2; end if(A(i-1,j-1)==1) if(B(i-1,j-1)~=lab) B=search(A,B,lab,i-1,j-1,A1,A2); end end if(A(i-1,j)==1) if(B(i-1,j)~=lab) B=search(A,B,lab,i-1,j,A1,A2); end end if(A(i-1,j+1)==1) if(B(i-1,j+1)~=1) B=search(A,B,lab,i-1,j+1,A1,A2); end end if(A(i,j-1)==1) if(B(i,j-1)~=1) B=search(A,B,lab,i,j-1,A1,A2); end end if(A(i,j+1)==1) if(B(i,j+1)~=1) B=search(A,B,lab,i,j+1,A1,A2); end end if(A(i+1,j-1)==1) if(B(i+1,j-1)~=1) B=search(A,B,lab,i+1,j-1,A1,A2); end end if(A(i+1,j)==1) if(B(i+1,j)~=1) B=search(A,B,lab,i+1,j,A1,A2); end end if(A(i+1,j+1)==1) if(B(i+1,j+1)~=1) B=search(A,B,lab,i+1,j+1,A1,A2); end end end %%% -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.12.104 ※ 編輯: rereaa 來自: 122.116.12.104 (06/08 22:43) ※ 編輯: rereaa 來自: 122.116.12.104 (06/08 22:44) ※ 編輯: rereaa 來自: 122.116.12.104 (06/08 22:45) ※ 編輯: rereaa 來自: 122.116.12.104 (06/08 22:48) ※ 編輯: rereaa 來自: 122.116.12.104 (06/08 22:49)

06/10 07:52, , 1F
i-1後會變成0 無法判讀A的位置
06/10 07:52, 1F

06/10 09:02, , 2F
請先學會看懂錯誤訊息
06/10 09:02, 2F
文章代碼(AID): #1Hiq98ay (MATLAB)