`با سلام در این بخش می خواهیم نحوه استفاده از درخت تصمیم در متلب را آموزش دهیم`

``` % Algorithm and Programming by: irmatlab % ۱۶ April 2015 % special thanks to "Nicholas Howe" for his very useful junction extractor routine clc; clear all; BW = imread('test.bmp'); BW3 = bwmorph(BW,'skel',Inf); BW4 = bwmorph(BW3,'spur',10); % ۱۰=delete noise branchs Inf=Extract Main branch BW5 = bwmorph(BW3,'spur',Inf); % 10=delete noise branchs Inf=Extract Main branch [row,col]=size(BW); [d_map,e_xy,j_xy] = anaskel(BW4); % junction count len = length (j_xy(1,:)); % Junction Removing % j % [ ][ ][ ] % i[ ][ ] % [ ][ ][ ] for i=1:len % 'len' is count of junction BW4(j_xy(2,i),j_xy(1,i))=0; % [i,j] = 0 BW4(j_xy(2,i)-1,j_xy(1,i))=0; BW4(j_xy(2,i)+1,j_xy(1,i))=0; BW4(j_xy(2,i),j_xy(1,i)-1)=0; BW4(j_xy(2,i),j_xy(1,i)+1)=0; BW4(j_xy(2,i)-1,j_xy(1,i)-1)=0; BW4(j_xy(2,i)+1,j_xy(1,i)+1)=0; BW4(j_xy(2,i)-1,j_xy(1,i)+1)=0; BW4(j_xy(2,i)+1,j_xy(1,i)-1)=0; end % (main tree) - (main branch) = branches branchs = BW4 - BW5; sm = bwmorph(BW5,'dilate',3); % Label connected components in binary image L = bwlabel(branchs); % adding branchs and main branch. L = L + (BW5*20); % ۲۰ is an assumed number! % Convert label matrix into RGB image RGB = label2rgb(L,'Lines'); imshow(RGB); hold on % End of points and Junction Plot plot(e_xy(1,:),e_xy(2,:),'go') % green dots plot(j_xy(1,:),j_xy(2,:),'ro') % red dots len_e = length (e_xy(1,:)) ; for i=2:len+1 if ( abs(e_xy(2,i)-row)>20 || abs(e_xy(1,i)-col)>20 ) % selecting the i'th label sel_color = L(e_xy(2,i),e_xy(1,i)); % splitting of selected branch sel_label = (L==sel_color); % if this branch is a soundly branch, then ... if (bwarea(sel_label)>4) % selected branch dilating, for finding collision between it and main branch. sl = bwmorph(sel_label,'dilate',3); % collision evaluation between selected branch and main branch by multiply function. dif = immultiply(sm,sl); % Multiply two images or multiply image by constant % zero result means there isn't any collision. on the other hand, % this branch is tertiary branch. wow! otherwise, it's a secondary % branch if (dif==zeros(row,col)) text (e_xy(1,i)+4,e_xy(2,i)-8,'3'); else text (e_xy(1,i)+4,e_xy(2,i)-8,'2'); end end end end % main branch will find in BW5 variable! % set label '1' on image hold on flag=0; for i=1:row for j=1:col if (BW5(i,j)==1) text (j+15,i+15,'1'); flag=1; break; end end if (flag==1) break; end end ```