寻找特定的细化算法

时间:2013-03-21 19:46:54

标签: image-processing mathematical-morphology

我有一个二进制图像,为简单起见,我们假设它是一个简单的直线:

00000000000000
00000000000000
00000000000000
11111111110000
00000000000000
00000000000000
00000000000000

我希望将其扩展为2px。

为此目的,我通过两次迭代应用扩张,正如预期的那样:

00000000000000
11111111111100
11111111111100
11111111111100
11111111111100
11111111111100
00000000000000

然后,我的想法是简单地应用细化并将初始线扩展两个像素。但相反,我缩短了线条,可能是因为线条粗细:

00000000000000
10000000000000
10000000000000
11111111100000
10000000000000
10000000000000
00000000000000

然后,我考虑使用钻石形状结构足迹而不是3x3个()进行扩张,但结果更糟糕 - 线条缩短了一个像素。

对于细化,我使用Zhang-Suen algorithmGuo-Hall algorithm,我也试过了由skimage暴露的Otsu方法,这产生了类似的结果。

有人可以告诉我有关瘦身算法的存在,这可以让我在哪里,或者可能采用不同的方法吗?


更新(以解决@marinus评论):

如上所述,我喜欢扩展2px的初始行并获得:

00000000000000
00000000000000
00000000000000
11111111111100
00000000000000
00000000000000
00000000000000

虽然我不能采用我的细化方法,因为细化似乎是这样的:

img

因此,通过扩展初始线,我不可能通过细化来扩展它。

2 个答案:

答案 0 :(得分:1)

答案在于您正在使用的形态学内核。在您的示例中,您提到您只想在水平方向上将线延伸两个像素。您应用的内核应符合您的目标。

对于拨号,每个“开”像素都是当前像素及其与内核的邻居。 3x3内核将在当前像素周围生成1。

3x3:

111
111
111

相反,如果你应用了一个5x1的内核:

00000
11111
00000

将它应用于您的原始信号,您将获得所需的结果。如果你只想在右边添加像素,那么做内核为111,内核的中心位于第一个像素上。

答案 1 :(得分:0)

بسماللهالرحمنالرحيمjavascript.js中的Zhang-Suen细化算法

for(x=0;x<5;x++){
for(n=0;n<2;n++){
for(i=0;i<len;){
p1=pp[i];p2=pp[i-width];p3=pp[i-width+1];
p8=pp[i-1];p9=pp[i-width-1];p4=pp[i+1];
p7=pp[i+width-1];p6=pp[i+width];p5=pp[i+width+1];
/* pixels position  
9   2   3
8   1   4   
7   6   5


*/
zn=0;
b=p2+p3+p4+p5+p6+p7+p8+p9;
if(p2<p3){zn++;}
if(p3<p4){zn++;}
if(p4<p5){zn++;}
if(p5<p6){zn++;}
if(p6<p7){zn++;}
if(p7<p8){zn++;}
if(p8<p9){zn++;}
if(p9<p2){zn++;}
if(b>=2&&b<=6&&zn==1&&p2*p4*p6==0&&p4*p6*p8==0&&n==0){id.push(i);}
if(b>=2&&b<=6&&zn==1&&p2*p4*p8==0&&p2*p6*p8==0&&n==1){id.push(i);}
i++;}
for(i=0;i<id.length;i++){pp[id[i]]=0;}id=[];
}}

结果:// https://lh6.googleusercontent.com/-rtDafT3tJ-Q/UqT6thazqJI/AAAAAAAABPE/b2dc7PQNZ24/w973-h220-no/Screenshot+from+2013-12-09+00%253A58%253A36.png

参考文献:

jsAscii - 使用Javascript和Canvas的图像中的ASCII艺术将图像转换为点http://blog.nihilogic.dk/2008/03/jsascii.html