2016-01-06 4 views
0

У меня есть два изображения, один из которых представляет собой изображение в оттенках серого (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 

Спасибо!

enter image description here

enter image description here

+1

Должна ли последняя строка ожидаемого результата быть 'x 10 8 6 4 2 x'? Я не знаю, почему эта строка была опущена. – rayryeng

ответ

0

Возможно ли вы ищете roifill?

new = roifill(old, mask); 
+0

yup, это или regionfill ... знал, что это уже должно быть. Благодаря! – user3470496

+1

Выполняет ли «roifill/regionfill» масштабирование градиента между столбцами? Я прошу любопытства, поскольку я действительно не знаю, что такое поведение при заполнении значений, обозначенных масками. – rayryeng

+1

@rayryeng это может быть так, что 'roifill' будет интерполировать по строкам ... в этом случае, не уверен, что это именно то, что ищет OP ... Однако, если он ищет полоски уйти, чем «roifill» - хороший выбор. – Shai