Перемаркировка пикселей на основе расстояния между центральной линией объекта и границей

У меня есть двоичное изображение, содержащее объект, как показано на рисунке ниже. centerline объекта изображен в red, Для каждого пикселя, принадлежащего объекту, я бы хотел пометить его цветом. Например, пиксели, ортогональное расстояние до центральной линии которых равно половине расстояния до границы объекта от центральной линии, должны быть помечены blue, иначе green, Иллюстрация приведена ниже. Есть идеи? Кроме того, как я мог соответствовать 1D gaussian в центре объекта centerline а также orthogonal к этому?

Изображение в полном разрешении можно найти по адресу: https://imgur.com/AUK9Hs9

1 ответ

Решение

Вот что приходит на ум (если у вас есть набор инструментов для обработки изображений):

Создайте два двоичных изображения, одно BWin с 1 (истинным) пикселем в месте вашей красной линии и одним BWout это противоположность вашей белой области (1 превосходит регион и 0 (ложь) внутри).

Как это:

BWin: Bwin

BWout: BWout

Затем примените евклидово преобразование к обоим, используя bwdist:

Din = bwdist(BWin);
Dout = bwdist(BWout);

Теперь у вас есть два изображения с интенсивностью пикселей, которые представляют евклидово расстояние до ближайшего не 0 пикселя.

Теперь вычтите оба, значения разности будут положительными на одной стороне равноудаленности и отрицательными на другой стороне:

blueMask=Din-Dout>0;
greenMask=~BWout & blueMask;

Затем вы можете заполнить слой RGB, используя маски:

Result=zeros(size(II));
Result(:,:,1)=BWin;
Result(:,:,2)=greenMask;
Result(:,:,3)=~blueMask & ~BWin;
imshow(Result);

Результат

Другие вопросы по тегам