MATLAB:在灰度图像中的两列之间建立梯度

MATLAB: building gradient between two columns in greyscale image

我有两张图片,一张是灰度图(orig),另一张是同样大小的带竖线的二值图(mask)。如果二进制值为 1,我想在灰度上从二进制线两侧的两列值创建一个渐变。例如:

binary:            old greyscale:         new greyscale:
0 0 1 1 1 0 0      x  10  x  x  x  6   x        x  10  9  8  7   6   x
0 0 1 1 1 0 0      x  1   x  x  x  5   x        x  1   2  3  4   5   x
0 0 1 1 1 0 0      x  5   x  x  x  13  x        x  5   7  9  11  13  x
0 0 1 1 1 0 0      x  10  x  x  x  2   x        x  10  8  6  4   2   x

到目前为止我有以下代码......不确定它是否有任何价值......它贯穿并找到 vectempa 中垂直条纹开始的 x 位置,vectemb 中的宽度,然后是vectemp1 和 vectemp2 两侧的灰度值。目前的计划是取 vectemp1 和 vectemp2 中每一列的差值的绝对值,除以 vectemb 中的那一列(宽度),然后用它来增加梯度……以某种方式考虑梯度的方向。这是有意义的还是有很多 better/easier 方法可以做到这一点?

vectempa=[];
vectempb=[];
vectemp1=[];
vectemp2=[];
q=1;
r=1;
for i=1:x
    if mask(1,i)==0 && mask(1,(i+1))==1
        vectempa(end+1)=i;
        vectemp1(1:z,q)=orig((1:z),i);
        q=q+1;
    elseif mask(1,i)==1 && mask(1,(i+1))==0
        vectempb(end+1)=i-vectempa(end);
        vectemp2(1:z,r)=orig((1:z),i);
        r=r+1;
    end
end

谢谢!

您是否正在寻找 roifill

new = roifill( old, mask );