【问题标题】:Alternative to multiple padarray calls to get a perimeter mask for image替代多个 padarray 调用以获取图像的周边掩码
【发布时间】:2020-11-24 20:57:25
【问题描述】:

我有一个双精度数组 img,我用它与掩码 mask.*img 进行倍增,其中掩码的中间值为 1,但在边界处线性变为 0,例如对于 5x5 的面具,它会是这样的

0.1 0.1 0.1 0.1 0.1
0 0.5 0.5 0.5 0.1
0.1 0.5 1 0.5 0.1 
0.1 0.5 0.5 0.5 0.1
0.1 0.1 0.1 0.1 0.1

我目前的想法是使用x = ones(M) 创建中心 然后创建一系列递减值y = [0.9 0.5 0.3 0.1] 然后做

for k = 1: size(y)
   x = padarray(x,[1 1], y(k))

这会将 y 的值添加为 x 周围的周长多次,一次一个。有没有更聪明的方法来制作这种在周边逐渐变细的面具?

【问题讨论】:

    标签: arrays image matlab


    【解决方案1】:

    做类似事情的一个有趣的方法可能是。其中向量Taper 与 5 x 5 矩阵的中心行相同。这些行是通过将转置中的相应元素与向量Taper(即Taper.')进行比较来生成的。

    分为几个步骤:

    第 1 行:min([0.1 0.5 1 0.5 0.1],[0.1]);[0.1 0.1 0.1 0.1 0.1]
    第 2 行:min([0.1 0.5 1 0.5 0.1],[0.5]);[0.1 0.5 0.5 0.5 0.1]
    第 3 行:min([0.1 0.5 1 0.5 0.1],[1]); [0.1 0.5 1 0.5 0.1]
    第 4 行:min([0.1 0.5 1 0.5 0.1],[0.5]);[0.1 0.5 0.5 0.5 0.1]
    第 5 行:min([0.1 0.5 1 0.5 0.1],[0.1]);[0.1 0.1 0.1 0.1 0.1]

    Taper = [0.1 0.5 1 0.5 0.1];
    Result = min(Taper, Taper.');
    
    Result
    

    【讨论】:

    • 有趣的想法。您如何将其扩展到行数多于列数的非对称情况,反之亦然?
    • 不知道,这取决于您希望如何配置锥度。
    • 理想情况下,我想要一个类似环的模式,其中最外层的行和列填充一个值,然后在其中一个具有更大值的环等。
    • 在尺寸不相等的情况下,戒指的两侧必须具有较大的厚度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2017-10-16
    • 2021-12-01
    相关资源
    最近更新 更多