基于MATLAB的郑孙细化算法
我一直在尝试在MATLAB上实现郑孙细化算法。我的代码正在运行,但结果不正确。该算法是在二进制字符上实现的。任何形式的帮助都将不胜感激基于MATLAB的郑孙细化算法,matlab,ocr,Matlab,Ocr,我一直在尝试在MATLAB上实现郑孙细化算法。我的代码正在运行,但结果不正确。该算法是在二进制字符上实现的。任何形式的帮助都将不胜感激 `I=im2double(I);`%%I=原始图像 [H,W]=尺寸(I);%图像的高度、宽度 J=I;%%J=骨架化图像 K=I;%%K=骨架化图像 B=0;%%B=非零邻居的数量 A=0;%%A=0-1模式 变化=1000;%%迭代过程中更改的像素数 P=零(8);%数组来保存8邻域值 %%外循环-循环直到没有像素更改%% while(CHANGE~=0)
`I=im2double(I);`%%I=原始图像
[H,W]=尺寸(I);%图像的高度、宽度
J=I;%%J=骨架化图像
K=I;%%K=骨架化图像
B=0;%%B=非零邻居的数量
A=0;%%A=0-1模式
变化=1000;%%迭代过程中更改的像素数
P=零(8);%数组来保存8邻域值
%%外循环-循环直到没有像素更改%%
while(CHANGE~=0)
变化=0;
%%第一次子迭代%%
对于r=2:H-1%%行
对于c=2:W-1%%列
如果(J(r,c)==1)
%%查找像素%%的8个邻域
`P(9)=J(r-1,c-1);
P(2)=J(r-1,c);
P(3)=J(r-1,c+1);
P(8)=J(r,c-1);
P(4)=J(r,c+1);
P(7)=J(r+1,c-1);
P(6)=J(r+1,c);
P(5)=J(r+1,c+1);
%%计算B%%
B=p2+p3+p4+p5+p6+p7+p8+p9;
%%计算%%
A=0;
如果(P(2)=0&P(3)==1)A=A+1;结束
如果(P(3)=0&P(4)==1)A=A+1;结束
如果(P(4)=0&P(5)==1)A=A+1;结束
如果(P(5)=0&P(6)==1)A=A+1;结束
如果(P(6)==0&P(7)==1)A=A+1;结束
如果(P(7)=0&P(8)==1)A=A+1;结束
如果(P(8)==0&P(9)==1)A=A+1;结束
如果(P(9)==0&P(2)==1)A=A+1;结束
%%决定是否应删除像素%%
如果((B>=2)&(B=2)&(B这不是一个答案,但我无法在上面发表评论。请提供郑孙细化算法的链接。此外,您的代码有缺陷。请重新发布它和任何输出图像
`I=im2double(I);` %% I = original image
[H,W]=size(I); %% height, width of image
J=I; %% J = skeletonized image
K=I; %% K = skeletonized image
B=0; %% B = number of non-zero neighbors
A=0; %% A = 0-1 patterns
CHANGE=1000; %% number of pixels changed over iteration
P=zeros(8); %% array to hold the 8-neighborhood values
%% OUTER LOOP - LOOP UNTIL NO PIXELS CHANGE %%
while (CHANGE ~= 0)
CHANGE =0;
%% FIRST SUB-ITERATION %%
for r=2:H-1 %% row
for c=2:W-1 %% column
if(J(r,c)==1)
%% find 8 neighborhood of pixel %%
`P(9) = J(r-1,c-1);
P(2) = J(r-1,c);
P(3) = J(r-1,c+1);
P(8) = J(r,c-1);
P(4) = J(r,c+1);
P(7) = J(r+1,c-1);
P(6) = J(r+1,c);
P(5) = J(r+1,c+1);
%% calculate B %%
B = P(2)+P(3)+P(4)+P(5)+P(6)+P(7)+P(8)+P(9);
%% COMPUTE A %%
A=0;
if ( P(2)==0 & P(3)==1 )A=A+1; end
if ( P(3)==0 & P(4)==1 )A=A+1; end
if ( P(4)==0 & P(5)==1 )A=A+1; end
if ( P(5)==0 & P(6)==1 )A=A+1; end
if ( P(6)==0 & P(7)==1 )A=A+1; end
if ( P(7)==0 & P(8)==1 )A=A+1; end
if ( P(8)==0 & P(9)==1 )A=A+1; end
if ( P(9)==0 & P(2)==1 )A=A+1; end
%% DECIDE IF PIXEL SHOULD BE DELETED %%
if( (B>=2) & (B<=6) & (A==1) & (P(2)*P(4)*P(6)==0) & (P(4)*P(6)*P(8)==0) )
K(r,c)=-1;
CHANGE=CHANGE+1;
end
end
end
end
%% SECOND SUB-ITERATION %%
J=K;
for r=2:H-1 %% row
for c=2:W-1 %% column
if(J(r,c)==1)
`P(9) = J(r-1,c-1);
P(2) = J(r-1,c);
P(3) = J(r-1,c+1);
P(8) = J(r,c-1);
P(4) = J(r,c+1);
P(7) = J(r+1,c-1);
P(6) = J(r+1,c);
P(5) = J(r+1,c+1);
B = P(2)+P(3)+P(4)+P(5)+P(6)+P(7)+P(8)+P(9);
A=0;
if ( P(2)==0 & P(3)==1 )A=A+1; end
if ( P(3)==0 & P(4)==1 )A=A+1; end
if ( P(4)==0 & P(5)==1 )A=A+1; end
if ( P(5)==0 & P(6)==1 )A=A+1; end
if ( P(6)==0 & P(7)==1 )A=A+1; end
if ( P(7)==0 & P(8)==1 )A=A+1; end
if ( P(8)==0 & P(9)==1 )A=A+1; end
if ( P(9)==0 & P(2)==1 )A=A+1; end
%% DECIDE IF PIXEL SHOULD BE DELETED %%
if( (B>=2) & (B<=6) & (A==1) & (P(2)*P(4)*P(8)==0) & (P(2)*P(6)*P(8)==0) )
K(r,c)=-1;
CHANGE=CHANGE+1;
end
end
end
end
CHANGE output # of changes this iteration
for r=1:H
for c=1:W
if(K(r,c)==-1)
K(r,c)=0;
end
end
end
figure, imshow(I); figure, imshow(J);