Перемаркировка пикселей на основе расстояния между центральной линией объекта и границей
У меня есть двоичное изображение, содержащее объект, как показано на рисунке ниже. centerline
объекта изображен в red
, Для каждого пикселя, принадлежащего объекту, я бы хотел пометить его цветом. Например, пиксели, ортогональное расстояние до центральной линии которых равно половине расстояния до границы объекта от центральной линии, должны быть помечены blue
, иначе green
, Иллюстрация приведена ниже. Есть идеи? Кроме того, как я мог соответствовать 1D gaussian
в центре объекта centerline
а также orthogonal
к этому?
Изображение в полном разрешении можно найти по адресу: https://imgur.com/AUK9Hs9
1 ответ
Вот что приходит на ум (если у вас есть набор инструментов для обработки изображений):
Создайте два двоичных изображения, одно BWin
с 1 (истинным) пикселем в месте вашей красной линии и одним BWout
это противоположность вашей белой области (1 превосходит регион и 0 (ложь) внутри).
Как это:
BWin
:
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);