Обрабатывать будем участок изображения тестовой телевизионной таблицы, чтобы рассматривать мелкие детали.
Для примера возьмем обычную маску ФНЧ [1]:
1 2 1 2 4 2 1 2 1
Воздействие маленьких масок не изотропное, так как расстояние между центральным элементом маски и вертикальными/горизонтальными элементами — условно 1, а между центральным элементом маски и диагональными элементами — корень из 2. Это ведет к некоторым геометрическим искажениям. Очевидным решением становится увеличение размера маски, для обеспечения изотропности. Когда обработка изображений на компьютерах только осваивалась, и время, затраченное на обаботку, было критично, увеличение размера маски велоо к уеличению объема вычислений, поэтому «лишние» элементы было принято заполнять нулями. Эти идеи развивал в 80-х годах товарищ Л.П. Ярославский, но на русском он издал три крупные книги, где не затрагивал этот вопрос, а мелких его статей или монографий я найти не смог.
Кстати, процитирую до кучи: «любой малоразмерный объект есть множество точек в некоторой компактной области (это может быть круг, прямоугольник, крест, ромб и т.д.). Вокруг центрального элемента есть «тормозная зона». Если размер этой зоны в два раза больше размеров объекта, то объект выделяется без искажений [2]».
Тот же ФНЧ для маски 5*5 элементов примет вид:
1 0 2 0 1 0 0 0 0 0 2 0 4 0 2 0 0 0 0 0 1 0 2 0 1
Однако, эффект размытия в разы сильнее, поскольку в формировании центрального пикселя нового изображения участвуют более далекие соседи.
Тот же ФНЧ для маски 7*7 элементов:
0 0 0 2 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 4 0 0 2 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 2 0 0 0
Сравним результаты обработки (по порядку — исходное изображение, 3*3, 5*5, 7*7):
Далее рассмотрим воздействие маски повышения четкости, рассчитанной моим духовным наставником Гальчуком И.В., и опубликованной в [3].
Фильтр повышения четкости 3*3:
-0.1 -0.1 -0.1 -0.1 2 -0.1 -0.1 -0.1 -0.1
Фильтр повышения четкости 5*5:
-0.1 0 -0.1 0 -0.1 0 0 0 0 0 -0.1 0 2 0 -0.1 0 0 0 0 0 -0.1 0 -0.1 0 -0.1
Фильтр повышения четкости 7*7:
0 0 0 -0.1 0 0 0 0 -0.1 0 0 0 -0.1 0 0 0 0 0 0 0 0 -0.1 0 0 2 0 0 -0.1 0 0 0 0 0 0 0 0 -0.1 0 0 0 -0.1 0 0 0 0 -0.1 0 0 0
И, для экстрима, фильтр повышения четкости 15*15:
0 0 0 0 0 0 0 -0.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 0 0 0 0 0 0 0 0 0 -0.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 0 0 0 0 0 0 2 0 0 0 0 0 0 -0.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 0 0 0 0 0 0 0 0 0 -0.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 0 0 0 0 0 0 0
И, собственно, результаты (по порядку — исходное изображение, 3*3, 5*5, 7*7, 15*15):
Собственно, результаты для маски 15*15 очевидны, поскольку для больших объектов возникает эффект искажения границ объектов при больших перепадах яркости, а так же смешение частей разных объектов друг с другом и разрушение некоторых деталей изображений. Как было сказано выше, это связано с тем, что значения яркости пикселей обработанного изображения формируются из далеко отстоящих от центральной точки элементов.
Проведя измерения для с/ш и кчх, выяснил, что оптимальный размер маски для этой группы изобрвжений — 7*7.
Замечательная особенность больших разреженных масок — в усилении эффекта с увеличением размера.
Это главный вывод по статье.
Конечно, можно делать большие заполненные маски (нет нулевых элементов, везде некие вычисленные коэффициенты), но тут возникает сложность расчета этих самых элементов, потому что создать маску для какой-то цели — очень нетривиальное и трудоемкое занятие, дающее наибольший эффект, как правило, для изображений, полученных в сходных системах при примерно одинаковых условиях. Время на обработку, соответственно, тоже увеличивается.
В стационарных изысканиях использую матлаб. Код для наложения маски очень простой:
input=imread('C:\input.jpg'); input=double(input); kernel=[-0.1 -0.1 -0.1;-0.1 2 -0.1;-0.1 -0.1 -0.1]/1.2; %Пишется маска - по сути, двумерный массив нужного размера % kernel=[0 0 -0.1 0 0;0 -0.1 0 -0.1 0;-0.1 0 2 0 -0.1;0 -0.1 0 -0.1 0;0 0 -0.1 0 0]/1.2; %Незаполненная маска 5*5, для примера output = imfilter(input, kernel); figure, imshow((output));
— снятия постоянной составляющей,
— уменьшения динамического диапазона сигнала от точечных объектов (вот так хитро боролись с импульсным шумом).
{сердце подсказывает, эта маска еще и геометрию отображения на суровых ЭЛТ-трубках типа осцилографических рихтовала}
2. Курячий М.И. Цифровая обработка сигналов: Учебное пособие. – Томск: кафедра ТУ, ТУСУР, 2012. – 172 с.
3. Конюхов А.Л., Гальчук И.В., Курячий М.И. Повышение разрешающей способности активно-импульсных телевизионно-вычислительных систем с использованием двумерной апертурной коррекции и итерационных алгоритмов. Курск, материалы конференции «Распознавание — 2012».
4. Мандражи В.П. Эффективность двумерной фильтрации сигналов при опрделении кординат точечных объектов. — М.: Техника средств связи. Серия «Техника телевидения». Выпуск 5 (№ 42), 1982 г.
Занимаясь обработкой черно-белых изображений систем технического зрения, я долго мучился с критериями качества, поскольку субъективный взгляд всегда субъективный, а компьютер дерево от дождя или траву от какой-нибудь помехи источника питания не отличает, если на это нет воли программиста.
В дальнейшем, по просьбам трудящихся могу написать обзор по оценке сигнал/шум и другим объективным (вычисляемым) параметрам качества для черно-белых изображений, методам вычисления контраста (банальнешая задачка, однако адекватных методик для низкокачественных изображений почти что и нет), по гомоморфной фильтрации и где она работает, ну, может, еще что-нибудь придумаем.
Спасибо за внимание!
ссылка на оригинал статьи http://habrahabr.ru/post/172231/
Добавить комментарий