Исправление отсутствующих границ в изображении в MATLAB - PullRequest
5 голосов
/ 03 августа 2011

Скажем, у меня есть целочисленная матрица, такая как отображаемая:

color-coded image

На изображении выше темные границы представлены числом 0 и имеют ширину один пиксель (пожалуйста, игнорируйте артефакты масштабирования).

Существует ли эффективный способ добавления отсутствующих темных границ в MATLAB?(белые кружки показывают примеры мест, где границы отсутствуют).

Я хотел бы гарантировать, что каждая цветная область полностью окружена темной границей при 4-х пиксельном соединении.

Обратите внимание, что решение обязательно сбросит ненулевые значения на ноль.

Соответствующая матрица имеет тип uint32 (отображается цветом выше).

РЕДАКТИРОВАТЬ: Исходное изображение здесь:

enter image description here

1 Ответ

7 голосов
/ 03 августа 2011

Я полагаю, что вы можете получить довольно приличные результаты с некоторой простой логикой, включающей сдвинутые версии вашего изображения (сделанные с использованием CIRCSHIFT ).Предполагая, что значение 0 представляет черный цвет, это должно работать:

rawImage = ...;                            %# Your starting image
shiftedImage = circshift(rawImage,1);      %# Shift image down one row
index = (rawImage ~= shiftedImage) & ...   %# A logical matrix with ones where
        rawImage & shiftedImage;           %#   up-down neighbors differ and
                                           %#   neither is black
rawImage(index) = 0;                       %# Set those pixels to black
shiftedImage = circshift(rawImage,[0 1]);  %# Shift image right one column
index = (rawImage ~= shiftedImage) & ...   %# A logical matrix with ones where
        rawImage & shiftedImage;           %#   left-right neighbors differ and
                                           %#   neither is black
rawImage(index) = 0;                       %# Set those pixels to black
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...