У меня есть два изображения, один из которых представляет собой изображение в оттенках серого (orig), другое - двоичное изображение того же размера с вертикальными линиями (маска). Если двоичное значение равно 1, я хотел бы на шкале серого создать градиент из двух столбцов значений по обе стороны бинарной строки. Например:MATLAB: градиент здания между двумя столбцами в изображении в оттенках серого
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, шириной в vectempb, а затем значение из оттенков серого с обеих сторон в vectemp1 и vectemp2. Текущий план состоит в том, чтобы принять абсолютное значение разности каждого столбца в vectemp1 и vectemp2, делить на этот столбец в vectempb (width), а затем использовать это, чтобы увеличить градиент ... так или иначе определяя направление градиента. Имеет ли это смысл или есть намного лучший/более простой способ сделать это?
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
Спасибо!
Должна ли последняя строка ожидаемого результата быть 'x 10 8 6 4 2 x'? Я не знаю, почему эта строка была опущена. – rayryeng