Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Обработка изображения - что делать с зернистостью?


Автор: MoebiusCat 5.1.2011, 14:27
Есть лабораторные микроснимки печатающей головки для принтера, на которых надо сделать регистрацию или что-то в этом роде (распознавание и отслеживание падающих капель). Есть такая проблема, что снимки очень зернистые - градиенты на областях одинаковой яркости почти такие же, как между "чёрным" и "белым".

Вначале я пробовала просто их сгладить, но этого оказалось недостаточно. Тогда я решила сделать бинаризацию (или бинаризацию после небольшого сглаживания), зернистость она более-менее убила, но из-за неравномерного освещения + остатки зернистости она работает не совсем правильно ( На картинке есть "чёрные" и "белые" области, у которых одинаковый уровень серого, поэтому простая глобальная бинаризация не работает. Я пробовала выделить какую-то "промежуточную" область, пиксель из которой считается "чёрным" или "белым" по количеству "чёрных" или "белых" соседей, но это тоже не дало стопроцентной точности. Ещё я пробовала поиграться с эрозией и тому подобным, но, опять же, это не смогло убить проблему полностью. )

Ещё я знаю, что есть различные методы адаптивной (локальной) бинаризации, например "верх шляпы". У кого нибудь есть ссылка на описание?

Ещё мне буквально только что пришло в голову воспользоваться Фурье трансформом и убить им высокие частоты. Должно помочь?

Какие ещё есть идеи?

Автор: Pavia 5.1.2011, 14:40
MoebiusCat, 
Снимок бы увидеть.  А вообще насколько могу судить вам должно хватить алгоритма Canny для выделения границ он хорошо справляется с шумом. 

По поводу бинаризации.  Алгоритм  Sauvola считается одинм из лучших.
Вот тут можно посмотреть реализацию его и парочки других.
http://www.djvu-soft.narod.ru/bookscanlib/project.htm

Добавлено через 6 минут и 41 секунду
А да с зернистостью хорошо борется медианный фильтер. 
Или адаптивнаое сглаживание бинаризация.
Берешь точку и смотришь в некоторой окрестности. если она выше чем средний то сглаживаем или бинаризуем.

А да обрати внимание на алгоритм Canny там есть такой момент как Non maximum suppression  тужи идею можно использовать при адаптивной бинаризации и сглаживания чтобы края лучше выделить. 

Автор: MoebiusCat 5.1.2011, 15:02
Присоединила снимок (в первое сообщение).

Выделение границ пробовала (на матлабе), в том числе Канни. Результат присоединён :(

Идея: а в чём заключается этот алгоритм? Возможно, я могу как-то его оптимизировать или понять, какой препроцессинг надо сделать, чтобы он сработал.

За ссылку огромное спасибо, сейчас буду читать.

Автор: VictorTsaregorodtsev 5.1.2011, 16:05
У меня для выделения границ на Вашем снимке хорошо сработал фильтр Превитта размером 7*7 - см. прицепленную картинку.
В общем, фильтр подобрать можно будет - такой, чтобы снимки без капель давали не слишком яркие "границы" (как для области между темным и светлым, так и для зернистых изображений на градиентном фоне) - а вот границы капли при этом будут поярче. А дальше - один порог (подогнанный автоматом или вручную) для определения - границы ли это капли или и нет (достаточно яркие или недостаточно яркие).
Если будет всё-таки значительный ложняк из-за шума (зернистости) - то снимки надо будет предварительно сглаживать скользящим окном довольно малого размера (думаю, что хватит окна 5*5).

Еще один вариант поиска капли на изображении - исходное (фоновое) изображение отфильтровать фильтром выделения границ, каждое новое изображение - тоже фильтровать тем же фильтром, и затем вычитать из первой картинки вторую. Из-за шума самой камеры расхождения в результатах фильтрации фоновых участков будут небольшими, и разность их тоже будет небольшой. А вот где появляется новая граница - там разность между "старой" границей (или её отсутствием) и новой границей будет уже существенна.
В текущем проекте я такую вещь себе сделал, обошелся фильтром Собеля 3*3 (малый размер фильтра - вери гуд для реалтайма, который мне в этом проекте нужен)

Автор: Pavia 5.1.2011, 16:05
MoebiusCat, 
Моя плакала когда увидела matlab. Да уж я то думал там у них все хорошо. А они и 1/3 от алгоритма Canny не реализовали.

Скачайте нормальный и попробуйте.

Я сюда для пробы закинул. 
http://matlabserver.cs.rug.nl/cannyedgedetectionweb/web/index.html

Выбираем файл drop1.bmp
И выставляем
Linear filtering
Sigma
 равной 7

И наслаждаемся картинкой.
http://s1.ipicture.ru/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)