所以基本上我想对二进制图像应用一个过滤器,该过滤器对相邻单元格的值进行加权平均。这部分我已经设置好了。
我现在的问题是我的图像中有一个“边缘”(不是矩阵的边缘)。我想对相邻元素进行加权,但只对我感兴趣的特定元素这样做。
我知道有两种方法。1)当边缘靠近磁盘时改变磁盘过滤器的重量,或者 2)以某种方式将边缘附近的值反射/镜像到另一侧。2)的问题是我的边缘不直,到处都是。
这是场景的过度简化:
bin = [0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0
1 1 1 1 1 0 0 0
1 1 1 1 1 0 0 0
1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
mask = [0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 0];
我想应用过滤器,bin
但我只想获取值为 1 in 的元素的权重mask
。由于边缘的非线性,我不一定能镜像bin
,所以必须有一些方法来改变磁盘滤波器的权重。例如,如果普通盘式过滤器中有 20 个元素,则每个元素的权重为 0.05。但是假设我们正处于平坦的边缘;盘式过滤器中只有一半的bin
值是 1 in mask
。因此将有 10 个元素,每个元素的权重为 0.1。有没有一种非迭代的方式来应用这样的过滤器?