Гонсалес Р., Вудс Р., Эддинс С. Цифровая обработка изображений в среде Matlab (2006) (1246139), страница 71
Текст из файла (страница 71)
Как уже сообщалось, я — это логический массив, в котором 1 стоят там, где обнаружен край, а 0 — там, где его нет. Выходной параметр с не является обязательным. Если он задан, то в него записывается значение порога, использованного функцией едяе. Если входной параметр Т задан, то с = Т. В противном случае, если Т не задан (или пуст, т.е, равен [ 3), то с равен автоматически выбранному порогу, который и использовался при обнаружении края. Одна из причин включения выходного параметра с заключается в задании начального значения для порога.
Функция ейбе использует детектор Собела по умолчанию, если применен синтаксис [я, с) = айке[1) или просто я = едяе(й). Дегпехтор 1Хрееитта Детектор Превитта использует маску из рис. 10.5, в) для численного приближения первых производных С и Сю Его общая форма вызова имеет вид [б, С) = е4яеИ, 'ргея1СС', Т, Ыт). Параметры этой функции имеют тот же смысл, что и в детекторе Собела. Детектор Превитта немного легче реализовывать с вычислительной точки зрения, чем детектор Собела, однако при этом возрастает невязка (ошибка) вычислений. (Можно показать, что коэффициенты 2 в масках Собела обеспечивает некоторое сглаживание результата.) Дегпехтор Робертса Детектор Робертса основан на маске из рис. 10.5, г) для приближения С и Сю Его форма вызова имеет вид С) = еййе(1, 'тоЬегев', Т, Жх).
Параметры этой функции имеют тот же смысл, что и в детекторе Собела. Детектор Робертса является одним из самых старых детекторов, используемых при обработке цифровых изображений, и из рис. 10.5, г) видно, что он устроен проще других. Однако этот детектор используется существенно реже всех остальных, приведенных на рис. 10.5, по причине его ограниченной функциональности (например, он несимметричен, его нельзя обобщить лля обнаружения краев, угол наклона которых является кратным 45' и т.
д.). Тем не менее, он все еще используется во многих аппаратных реализациях, где простота и скорость являются определяющими факторами обработки. Детехтор лапласиан гауссиана [йоС) Рассмотрим функцию Гаусса ~б06 б б. б бб Ю где г~ = х~ + у~, а о это стандартное отклонение. Свертка этой сглаживающей функции с изображением приводит к его расфокусировке. Степень расфокусировки определяется значением о. Лапласиан функции Гаусса (вторая производная по г) равен Эту функцию, по очевидным причинам, принято называть лапласианом гауссиана (1 оС). Поскольку взятие второй производной является линейной операцией, то свертка (фильтрация) изображения с буэй(т) это то же самое, что свертка функции со сглаживающей функцией, а затем применение оператора Лапласа к результату. В этих действиях проявляются ключевые свойства детектора ЬоС.
Свертка изображения с Чг[т(т) даст два эффекта: она сглаживает изображение (сокращает шум) и вычисляет лапласиан, что выявляет сцвоенные края на изображении. Окончательная локализация краев состоит в нахождении пересечений нулевого уровня между двойными краями. Общая форма вызова детектора ЬоС имеет вид [8, С3 = еййе[т, б1ойб, Т, в1дпа), где вййва — это стандартное отклонение, а остальные параметры объяснялись выше. Значение в18ша по умолчанию равно 2. Как и раньше, функция ебйе игнорирует перепады, значение которых меньше порога Т.
Если Т не задано или оно пусто, едбе выбирает порог автоматически. Если положить Т = О, то функция ебйе построит замкнутые контуры, что является обычной характеристикой метода ЬоС. Детентпор пересечения нулевого уровня Этот детектор основан на том же принципе, что и метод 1 оС, но свертка выполняется с фильтром Н, который задается пользователем. Он имеет синтаксис [8, Х] = ебйе[1, 'хегосговв', Т, Н). Остальные параметры объяснены при описании детектора ЬоС. Детпентпор Канин Детектор Капни (см. (Саппу, 1986() является самым мощным детектором, заложенным в функцию ес~йе.
Этот метод можно кратко описать следующим образом: 1. Изображение сглаживается гауссовым фильтром с заданным стандартным отклонением о для сокращения шума. г па 2. В каждой точке вычисляется градиент д(х,у) = [сб~ + С~~ и направление кРаЯ а(х, У) = агс18(Сэ/С ). ДлЯ нахождениЯ С и Ст можно использовать любой метод из табл. 10.1. Точки перепада определяются как точки локального максимума градиента. 3.
Точки перепада, определенные в п. 2, вызывают рост гребней на изображении модуля градиента. Затем алгоритм отслеживает верх этих гребней и присваивает нулевое значение точкам, которые не лежат на гребне. В результате на выходе строится тонкая линия, а весь этот процесс называется О.. Об * ~ д 40~~7) немаксимольньгм подавлением. Затем пикселы гребня подвергаются пороговой обработке с использованием двух порогов Т1 и Т2, причем Т1 ( Т2. Пикселы гребня, величина которых больше Т2, называются «сильными», а пикселы, значения которых попадают в интервал [Т1,Т2~, называются «слабыми».
4. Наконец, алгоритм совершает соединение, добавляя к сильным пикселам слабые, которые 8-связаны с сильными. Синтаксис детектора Капни для обнаружения перепадов имеет вид С) = ебйе(1, 'сашгу', Т, в18ша), где Т вЂ” зто вектор [Т1, Т2), состоящий из порогов, описанных в п.З, а в16ша обозначает стандартное отклонение сглаживающего фильтра. Если параметр с включен в выходные аргументы, то он является вектором из двух компонент, куда записаны два порога, использованные алгоритмом. Все остальные параметры имеют обычный смысл, объясненный для других методов, включая автоматическое определение порогов, если вектор Т не задан. Значение в18ша по умолчанию равно 1. Пример 10.3.
Извлечение краев с помощью детекгпора Собела. Мы можем получить и отобразить вертикальные края на изображении 1 из рис. 10.6, а) с помощью следующих команд: » [бч, с) = ейбе(Х, 'воЬе1', 'четсйса1'); » 1швЬои(йч) » с 0.0616 Как показано на рис. 10.6, б), на результирующем изображении преобладают вертикальные края (отображены также некоторые края, которые имеют и вертикальные, и горизонтальные компоненты). Мы можем подчистить слабые края, выбрав более высокий порог.
Например, рис. 10.6, в) построен командой » бч = ебйе(1, 'воЬе1', 0.16, 'чегс[са1'); Используя то же значение Т в команде » яЬосЬ = еабе(1, 'воЬв1', 0.16); получим результат на рис. 10.6, г), на котором доминируют как вертикальные, так и горизонтальные края. Функция еббе с опцией воЬе1 не позволяет обнаружить края под углом х45'.
Чтобы вьщелить такие перепады, необходимо задать специальную маску и воспользоваться функцией 1ш111сег. Например, рис. 10.6, д) построен с помощью команд' » и46= [2-10; -101~ 012) гнеличина порога т подобрана экспериментально, чтобы результат можно было сравнить с рис. 10.6, е) и е). С~~408 Грани !<! <'грамс'мп~ауил о~.~ойрат. ~ еиий я45 = !3," Р3 Црим~Р 10, $. Бмю>кндр,о..! удыкапаь обцп~ч,.ю~~цд л~ас~ с поло, "~л Ф*'". ~~~»» ««* 1 « Начав от значения по умолчанию, параметры для каждой опции были интерактивно проварьированы для получения самого лучшего обнаружения указанных выше деталей исходного изображения и удаления ненужных деталей, насколько это было возможно. Результат показан в правой колонке изображений на рис.
10.7. Он получен следующими командами: » 5 воЬе1 Ьевс = еобеИ, 'воЬе1', 0.05); '/ рис. 10.7, б) » 5 1об Ьеве = ейбе(х, '1об', 0.003, 2.25); '/ рис. 10.7, г) » 5 сюшу Ьеве = еобе(1, 'савау', 10.04 О. 103, 1.5); '/ рис. 10.7, е) На рис. 10.7, б) видно, что результат Собела, на самом деле, только ухудшается при попытке выявить бетонную полосу и левую сторону входа здания.
Результат ВоС на рис. 10.7, г) немного лучше Собела и значительно превосходит результат ЬоС с параметрами по умолчанию. Однако и здесь не удается выявить полностью ни левую сторону входа, ни бетонную полосу. Результат детектора Капни на рис. 10.7, е) превосходит все прочие результаты. Обратите внимание, что здесь четко обозначен левый край входа в здание, видна бетонная полоса и другие детали, например, контуры вентиляционной решетки над входом. Помимо выявления всех деталей, детектор Канин позволяет получить самую ясную «карту» изображения. 5) ! 0.2. Обнаружение линий с помощью преобразования Хафа В идеале рассмотренные выше методы должны обнаруживать только пикселы, принадлежащие краям и перепадам яркости. Однако на практике выделенные пикселы редко относятся только к этой категории в силу многих причин: воздействия шума, разрыва краев из-за неравномерного освещения и других факторов, которые вносят ложные перепады яркости в изображения.
Поэтому за алгоритмом обнаружения краев обычно следует процедура компоновки выделенных пикселов краев в настоящие, осмысленные линии и краевые сегменты. Один из подходов к выполнению подобных действий основан на преобразовании Хафа (Ноийй, 1962)). Имея некоторое множество точек изображения (обычно двоичного), предположим, что требуется найти подмножества этих точек, которые лежат на прямых линиях.
Один возможный подход заключается в построении всевозможных прямых, задаваемых парами этих точек, а потом в обнаружении точек, которые расположены близко к конкретным прямым. Проблема реализации такой процедуры связана с необходимостью рассмотрения п(п — 1)/2 пз прямых, а затем в выполнении порядка и (п(п — 1)) /2 пэ операций сравнения всех точек с каждой из этих прямых. Вычислительная сложность такого решения позволяет применять его лишь в самых простых прикладных задачах.
Имея преобразование Хафа, возможен иной подход. Рассмотрим любую точку (х„у,) и все проходящие через нее прямые. Все такие прямые удовлетворяют уравнению у, = ах, + Ь для произвольных значений а и Ь. Однако если переписать это уравнение в виде Ь = — ах, + у, и рассмотреть соответствующую аЬ-плоскость О.й.об у . б Х~ 4Д (называемую проппрансгаеом параметров), то оно задаст единстпеенную прямую для каждой фиксированной координатной пары (х„у,). Более того, другой точке (х, у ) соответствует своя прямая в пространстве параметров, и эти две прямые пересекаются в некоторой точке (а', Ь'), где а' — это угловой коэффициент, а Ь'— точка пересечения с осью у прямой, проходящей через точки (х„у,) и (х,у ) на ху-плоскости.