Как Matlab может вычислить шероховатость вдоль границы ребра? - PullRequest
0 голосов
/ 27 февраля 2019

Как Matlab может определить шероховатость вдоль границы ребра?Например, как Matlab может определить, что 1-е изображение является гладким, а 2-е - шероховатым?

РЕДАКТИРОВАТЬ: Я также хочу, чтобы Matlab мог определять, какие края являются гладкими и шероховатыми на одном и том же изображении:

1 Ответ

0 голосов
/ 27 февраля 2019

Если ваши представляющие интерес изображения имеют тот же тип, что и показанный вами, простой подход может быть (Необходим инструмент обработки изображений):

smooth = imread('smooth.png');

figure(1);
imshow(smooth);

smoothOpened = (smooth, ones(21));

figure(2);
imshow(smoothOpened);

smoothDiff = smooth - smoothOpened;

figure(3),
imshow(smoothDiff);

smoothDifference = sum(smoothDiff(:) > 0)

rough = imread('rough.png');

figure(4);
imshow(rough);

roughOpened = imopen(rough, ones(21));

figure(5);
imshow(roughOpened);

roughDiff = rough - roughOpened;

figure(6);
imshow(roughDiff);

roughDifference = sum(roughDiff(:) > 0)

smoothDifference =  2592
roughDifference =  11328

(Вывод изображения здесь опущен.)

По сути, мы делаем морфологическое открытие (imopen), чтобы избавиться от «шипов».Вы можете изменить форму и размер структурирующего элемента.Я использовал простой квадрат 21 х 21 здесь.После этого мы определяем разницу между оригиналом и «открытым» изображением.Количество пикселей больше 0 может быть приблизительным для «гладкости» или «шероховатости».Как я уже сказал, этот подход может работать только для изображений, как показано в вопросе.

Следует использовать двоичные изображения, чтобы imopen также генерировал двоичные изображения.Для простоты я использовал общую версию uint8, в результате чего значения пикселей 0 xxxOpened.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...