Как реализовать морфологию серой шкалы для обнаружения круглого объекта на изображении серой шкалы в Matlab?

Есть много способов реализовать математическое преобразование в двоичном изображении, например, imerode и imdlates. Он также используется для обнаружения различных объектов / форм с помощью этих простых операций на двоичном изображении, но проблема, с которой я сейчас сталкиваюсь, заключается в том, чтобы применить эту простую операцию, т. Е. Размывать, расширять и многое другое на изображении в оттенках серого, не преобразовывая их в двоичное изображение.

Selement = strel('disk',5);//disk type element used in morphology
erodeimage = imerode(image,selement);//this is only implement on binary image

Вышеприведенный код предназначен для двоичного преобразования математики. Как реализовать ту же концепцию на изображении в оттенках серого.

Примечание: Если у вас есть какие-либо ресурсы по математике серой шкалы, просим предоставить ее или предоставить полезную ссылку

1 ответ

Решение

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

Я думаю, что самой быстрой библиотекой C++ является SMIL, и вы можете вызвать ее из MatLab. Другой быстрый в C - это тот, который оптимизирован для открытия / закрытия за один проход.

Но если вы хотите понять расширение уровня серого, вот как это работает: для данного пикселя p вы анализируете значение всех пикселей в его окрестности (определяемых элементом структурирования), и вы воздействуете на p наибольшее значение по соседству. Вы делаете это для каждого пикселя в вашем изображении. Смотрите формулу

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