如何使用FFT卷积进行形态学侵蚀

时间:2015-03-29 16:46:29

标签: python image-processing scipy mathematical-morphology

我尝试使用FFT卷积计算形态学侵蚀。我知道侵蚀是扩张的双重手术。第一个问题是我不能使用0作为背景,因为我通常会这样做。所以我偏袒了我的价值观。让0.1值表示背景,1.0表示前景。将背景反转为前景并使用结构元素执行FFT卷积(使用scipy.signal.fftconvolve)我获得了无法进一步解释的结果。我知道我应该以某种方式对解决方案进行阈值处理并反过来怎么办?

我的2D信号A:

1 1 0 1 1
1 1 1 1 1
0 1 1 1 0
1 1 1 1 1
1 1 0 1 1

结构元素B:

0 1 0
1 1 1
0 1 0

侵蚀(A,B):

0 0 0 0 0
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
0 0 0 0 0

使用FFT卷积,inv(A):

0.1 0.1 1.0 0.1 0.1
0.1 0.1 0.1 0.1 0.1
1.0 0.1 0.1 0.1 1.0
0.1 0.1 0.1 0.1 0.1
0.1 0.1 1.0 0.1 0.1

和B:

0.1 1.0 0.1
1.0 1.0 1.0
0.1 1.0 0.1

结果如下:

0.31 1.32 1.32 1.32 0.31
1.32 0.72 1.44 0.72 1.32
1.32 1.44 0.54 1.44 1.32
1.32 0.72 1.44 0.72 1.32
0.31 1.32 1.32 1.32 0.31

下一步是什么? normalize / threshold然后反转?

祝你好运

1 个答案:

答案 0 :(得分:0)

我的回答很晚才到,但我仍然给它。

  • Erode(A,B)错了。这应该是答案:
  

1 0 0 0 1

     

0 1 0 1 0

     

0 0 1 0 0

     

0 1 0 1 0

     

1 0 0 0 1

  • 侵蚀/膨胀是等级操作,尤其是最小/最大操作,但绝对不是卷积。因此,您无法使用FFT执行它们。