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 );
我有两张图片,一张是灰度图(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 );