【问题标题】:Matlab, why is strel non-semetrical with respect to the angle?Matlab,为什么 strel 相对于角度是非对称的?
【发布时间】:2017-01-03 11:34:41
【问题描述】:

我试图在 8 个不同方向上使用线结构元素对图像应用闭合操作。最初我想将它应用于[0 .. 360] 范围内的角度,但后来我意识到我的结构元素是对称的,所以我想改用[0 .. 180] 范围。然而,我后来意识到,Matlab 的结构元素函数(strel)对于相隔 180 度的角度不会产生对称的结果。考虑:

>> strel('line', 11, 120)

ans =

Flat STREL object containing 9 neighbors.

Neighborhood:
     1     0     0     0     0
     1     0     0     0     0
     0     1     0     0     0
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     1     0
     0     0     0     0     1
     0     0     0     0     1


>> 

还有:

>> strel('line', 11, 300)

ans =

Flat STREL object containing 9 neighbors.

Neighborhood:
     1     0     0     0     0     0     0
     0     1     0     0     0     0     0
     0     1     0     0     0     0     0
     0     0     1     0     0     0     0
     0     0     0     1     0     0     0
     0     0     0     0     1     0     0
     0     0     0     0     0     1     0
     0     0     0     0     0     1     0
     0     0     0     0     0     0     1

我希望上面的 2 个结构元素应该是对称的,因为 300 = 120 + 180。为什么 Matlab 的 strel 函数不是这样?

【问题讨论】:

  • 这只是一个近似值。我不希望得到完全相同的结果。稍微增加或减少你的角度,我相信你会在某个时候得到相同的结果。如果您真的想知道为什么应该联系 Mathworks 并询问他们。我怀疑我们中的许多人都看过他们的源代码:)

标签: matlab image-processing


【解决方案1】:

土豆:

这是一个有趣的观察。如果您碰巧在 MATLAB 中查看 strel 对象的实现,要观察的行是这些(在 MakeLineStrel 子函数中):

theta = theta_d * pi / 180;
x = round((len-1)/2 * cos(theta));
y = -round((len-1)/2 * sin(theta));

theta_d 值是您指定的角度,以度为单位,len 是您请求的线的长度。

xy 的值定义了线的整数值“终点”,结构元素的构造使其相对于原点对称。

由于此处的舍入操作,当您为theta_d 指定120 时,(x,y) 将是(-2, -4),但是当您指定300 时,(x,y) 将是(3, 4)。这是由于角度的表示方式而导致离散线不同的根本原因。

鉴于这种理解,在您的操作中使用它之前,实际打印结构元素的邻域并确保它看起来正确是最安全的。

希望这会有所帮助。

【讨论】:

  • 谢谢;任何线索我们可以使用什么方法来编写一个对称的自定义 strel 函数?
  • potatoes:我认为解决这个问题的一个好方法是传入[0 180] 范围内的角度。在将它传递给strel之前可能是mod(角度,180)?问题真的是没有一个正确的答案,因为我们正在逼近一条离散的线。
猜你喜欢
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 2016-01-18
  • 2018-04-25
  • 2017-09-29
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
相关资源
最近更新 更多