Гонсалес Р., Вудс Р., Эддинс С. Цифровая обработка изображений в среде Matlab (2006) (1246139), страница 73
Текст из файла (страница 73)
П МОМРЕАКЯ 1в ошАССе6, 1С 6е1аи1Св Со 1. 11 пагЕ1п < 4 пЬоо6 = в1хе(Ь)/50; % Ма1се виге СЬе пе1ЕЬЬогЬоо6 в1хе 1в о66. пЬоо6 = шах(2*се11(пЬоо6/2) + 1, 1); еп6 11 пагЕАп < 3 СЬгевЬо16 = 0.5 и шах(Ь(;)); еп6 11 пагЕ1п < 2 пишреаКв = 1; еп6 6опе = Ха1ве; Ьпею = Ь; г = П; с = П; вЬ11е 6опе [р, Ч) = 11п60шев == шах(1шеш(:))); р = р(1); ч = ч(1); 1Х Ьпею(р, Ч) >= СЬгевЬо16 г(еп6 + 1) = р; с(е~6 + 1) = Ч; % Бирргеяя СЬ1в шах1шиш ап6 1Св с1ове пе1ЕЬЬогв.
р1 = р — (пЬоо6(1) — 1)/2; р2 = р ~ (пЬоо6(1) — 1)/2; Ч1 = Ч вЂ” (пЬоо6(2) - 1)/2; Ч2 = Ч + (пЬоо6(2) - 1)/2; [рр, ЧЧ) = 6аг16(р1:рг, Ч1:Чг); РР = РР(:)' Чч = Чч(:)' % ТЬгов аиау пеАЕЬЬог соог61паСея СЬаС аге оиС оХ Ьоип6в 1п % СЬе гЬо 61гесС1оп. Ьа6гЬо = 11п6((рр < 1) ~ (рр > в1хе(Ь, 1))); рр(ЬабгЬо) = П; ЧЧ(Ьа6гЬо) = П; % Рог соог61папея СЬаС аге оиС о1 Ьоип6я 1п СЬе СЬепа % 61гесС1оп, ве вапС Со сопвхбег СЬаС Н 1в апС1вушшепг1с % а1ощ СЬе гЬо ах1в 1ог сЬепа = +/- 90 6еНгеев. СЬега Соо 1ов = 11п6(ЧЧ < 1); (418 Глава Нс Сегментация изобраггеений с)с((СЬеса соо 1оя) = в1хе(Ь, 2) + цс((сЬеса Соо 1оя); рр(СЬеса Соо 1оя) = в1зе(Ь, 1) — рр(СЬеса Соо 1он) + 1; СЬеСа Соо ЫЕЬ = 11пд(с(с( > я1ге(Ь, 2)); с(с((СЬеса Соо ЫЕЫ = с(9(СЬеса Соо ЫЕЫ вЂ” в1хе(Ь, 2); рр(СЬеса Соо ЫЕЫ = в1хе(Ь, 1) — рр(СЬеСа Соо ЫЕЬ) + 1; '/ Сопнегс со 1гиеаг 1псс1сев со хего опс а11 сЬе на1пев.
Ьпея(япЬ21пй(в1хе(Ьпея), рр, с[с()) = О; сгопе = 1епЕСЬ(г) == пшпреайв; е1ве с1опе = Сгпе; епс) епс1 Функция ЬопЕЬреа1св иллюстрируется в примере 10.6. 10.2.2. Преобразование Хафа при обнаружении линий и связывании После обнаружения множества локальных максимумов преобразования Хафа остается определить, есть ли сегменты краев, проходящие по соответствующим линиям, а также где они начинаются и заканчиваются. Для каждого максимума сначала следует найти положения всех ненулевых пикселов изображения, которые лежат на соответствующих прямых. Для этих целей написана следующая функция ЬопЕЬР1хе1в. 1ппсС1оп [г, с) = ЬопЕЬРАхе1в(1, СЬеса, гЬо, гЫп, сьгп) '/НООСНР1ХЕЬЯ Сошрпсе 1шаЕе р1хе1в Ье1опЕ1пЕ Со НопЕЬ Сгвпв1огш Ып. '/ [К, С] = НОООНР1ХЕ18(Р, ТНЕТА, КНО, КВ1М, СВ1М) сошрпсев СЬе '/ гое-со1пшп 1п61сев (К, С) 1ог павшего р1хе1я 1п 1шаЕе Р СЬас шар Х со а рагс1сп1аг НопЕЬ сгапя1огш Ь1п, (ВВ1М, СВ1М).
КВТМ апб СВ1М '/ аге вса1агв 1пс)1саС1пЕ СЬе гон-со1шпп Ып 1осаСАоп 1п СЬе НопЕЬ '/ Сгапв1огш шасг1х геспгпес( Ьу 1ппсс1оп НОООН. ТНЕТА апсс КНО аге '/ СЬе весопс( апс( СЫгсс опСрпс агЕпшепсв 1гош СЬе НОООН 1ппсс1оп. [х, у, на1] = 11па(г); х = х — 1; у = у — 1; СЬеса с = СЬеса(сьгп) в р1 / 180; гЬо ху = хасая(спаса с) + уввгп(СЬеСа с); пгЬо = 1епЕСЬ(гЬо); в1оре = (пгЬо - 1)/(гЬо(епс1) — гЬо(1)); гЬо Ып 1пйех = гоппй(в1орев(гЬо ху — гЬо(1)) + 1); 1ссх = 11псс(гЬо Ьгп 1пс)ех == гЫп); г = х(1ссх) + 1; с = у(16х) + 1; Пикселы, обнаруженные функцией ЬопЕЬр1хе1в, необходимо сгруппировать в сегменты. Для этого можно воспользоваться следующей стратегией: 1. Повернуть пикселы на угол 90' — М так, чтобы они легли примерно вдоль вертикальной прямой. 2.
Упорядочить пикселы в порядке возрастания величин их повернутых х-координат. 3. Использовать функцию с)111 для определения зазоров (щелей). Заполнить малые зазоры. Это дает эффект слияния примыкающих сегментов линий, которые разделены малыми промежутками. 4. Возвратить информацию о сегментах линий, которые длиннее некоторой минимальной пороговой длины.' ХвпсС1оп 1гпев = ЬопБЫгпев(1,СЬеса,гЬо,гг,сс,1111Еар,ш1п1ещСЬ) %НООСН11МЕЯ ЕхСгасС 11пе веБшепсв Ьавеб оп СЬе НопБЬ Сгаля1огш.
% ЬХМЕБ = НООСН11МЕБ(Р, ТНЕТА, ННО, НН, СС, Р1Ь1САР, И1МЬЕМСТН) % ехсгасСв 1гпе веБшепсв гп СЬе 1шаБе Р азвос1асеб и1СЬ рагС1сп1аг '/ Ыпв 1п а НощЬ СгапвХогш. ТНЕТА апс( ННО аге яессогв теспгпес( Ьу % 1ппсС1оп НООСН. Чессогв НН апд ОО врес11у СЬе говз апс) со1ншпз % оХ СЬе НопЕЬ СгапвХогш Ыпв Со пве 1п веагсЫщ 1ог 1гпе % веЕшепсв. 11 НООСНПМЕБ 11пбв Сио 11пе веБшепсз аввос1асеб и1СЬ % СЬе ваше НопБЬ Стапв1отш Ып СЬаС аге верагасес) Ьу 1евв СЬап % Р111САР р1хе1в, НООСН11МЕБ шетЕев СЬев гпСо а в1щ1е 11пе % вейшепС. Р111САР пе1ап1Св Со 20 11 ош1ССе4. ИегЯес) 11пе % веБшепсв 1езв СЬзл И1М|ЕМСТН р1хе1в 1опБ аге 61всатс)ес(. % И1МЬЕМСТН йеХап1Св Со 40 11 ош1ССес). % % 11МЕЯ 1в а встпсСпге аггау вЬове 1епБСЬ ес)па1в СЬе ппшвег оХ % шегБес) 11пе ведпепсв Топпс(.
ЕасЬ е1ешепС оХ СЬе всгпсспге аггау % Ьав СЬеве 11е16в: % % ро1пС1 Епп-ро1пС оХ СЬе 11пе веБшепС; Сио-е1ешепС яессог % рогпС2 Епд-рогпС о1 СЬе 11пе веБшепС; Сио-е1ешепС яессог % 1ещСЬ 01всалсе Ьесвееп ро1пс1 апд ро1пС2 % СЬеСа Ащ1е (1п с)еЕгеев) о1 СЬе НопБЬ СгапвХогш Ып '/. гЬо НЬо-зх1в роз1С1оп о1 СЬе НопБЬ СгалвХотш Ып 11 пагБАл ( б 1ШЕар = 20; епс) 11 пагБ1п < 7 шпп1ещСЬ = 40; епс) шлп1гпев = 0; 11пев = зСгпсС; Хог и = 1:1епБСЬ(гг) гЬгп = тг(Ь); сЫп = сс(Ь); % Сес а11 р1хе1в аззос1асеб и1СЬ НощЬ Сгапз1опп се11. (г, с] = ЬопЕЬРАхе1в(1, СЬеСа, гЬо, гЫп, сЫп); 11 1вешрСу(г) сопС1ппе епс) сФункция В = Плт(А) вычисляет обратную матрицу для А. (ОО Г О.С б % Носаге СЬе р[хе1 1осаС1опв аЬоиС (1,1) во СЬаС СЬеу 11е % арргох[шасе1у а1опя а чегС1са1 1[не. ошеба = (90 — СЬега(сЬ1п)) е р1 / 180; Т = [сов(ошеяа) в1п(ошеба); -в1п(ошеяа) сов(ошеяа)]; ху = [г - 1 с - 1] ь Т; х = вогс(ху(:,1)); % Е1па СЬе яарв 1агяег СЬвп СЬе СЬгевЬо1а.
а111 х = [НШ (х); 1п1]; 1ах = [О; 11па(а111 х > 1111яар)]; Тот р = 1:1епНСЬ(16х) — 1 х1 = х(16х(р) + 1); х2 = х(мух(р + 1)); 11пе1епяСЬ = х2 — х1; 11 11пе1епНСЬ >= ш1п1епНСЬ рогпС1 = [х1 гЬо(гЬ[п)]; ро1пС2 = [х2 гЬо(гЬ1п)]; % Ногаге СЬе епа-ро1пС 1осаС1опв ЬасК Со СЬе ог181па1 % апя1е. Тгпч = 1пч(Т); рохпС1 = ро1пС1 е Т1пч; ро1пС2 = ро[пС2 в Т1пч; пош11пев = пиш11пев + 1; 11пев(ппш1хпев).ро1пС1 = ро[пС1 + 1; 11пев(пиш11пев).ро1пС2 = рохаС2 + 1; 11пев(пиш11пев).1епяСЬ = 11пе1епНСЬ; 1гпев(пиш11пев).СЬеСа = СЬеСа(сЬ1п); 11пев(пош11пев).гЬо = гЬо(гЬ[п); епа епй епа Пример 10.6.
Использование преобразования Хафа для обнаружения линий и связывания. В данном примере вы воспользуемся функциями ЬопяЬ, ЬопяЬреа)св и ЬоияЬ11пев для обнаружения сегментов линий на двоичном изображении 1, приведенном на рис. 10,7, е). Прежде всего, мы вычислим н покажем преобразование Хафа, используя меньший ~наг угловой дискретизации, чем принятый по умолчанию [ьгб = 0.5 вместо 1.0). » [Н, СЬеса, гпо] = ЬоияЬ(1, 0.5); » 1швЬоч(СЬеСа, гЬо, Н, [ ], 'посгпев1хе'), ах1в оп, аххв погша1 )) х1аЬе1('~СЬеса'), у1аЬе1('~гЬо') Затем с помощью функции ЬопяЬреа)св мы находим 5 локальных максимумов преобразования Хафа, которые, скорее всего, имеют существенный смысл.
» [г, с] = ЬоиНЬреа)св(Н, 5); )) Ьо1й оп )) р1оС(СЬега(с), гЬо(г), '11певсу1е', 'попе', 'шаг)сег', 'в', 'со1ог', 'я') !и ~ //ори о~ ил н6рп6о~~ кп 421) '~:=Ф Ц~ д~н, П), Ц, и ~ у~~~брр~мцу шн«. ори ~оьу~ие Ла4~и с у~я щннеи и~ си, ю,;,,~,«, «...;.,~!- :",!..".".;.":;.-:„: 1;.';„,".";:,::;;ж",:.".-.,:,".,~;::,"..',:„".'.,:,.;",:-.;„'..",:м-::::!.',.!.',к,',;:;:.'.";::-."-.'",:.:,":..",",.!".;..'-:,,'"!,:,'! .,'.: '...'! .,'.". '.;:-:::;.";.,~-. (~2» гг».С * Г» которой у" 1х, у) > Т, называется то"гной обвехта, а в противном случае она называется точкой фона. Иными словами, изображение д(х, у), которое получается в результате этого порогового преобразования, определяется следующим образом: / 1 при )'(х, у) > Т, ) 0 приДх,у) < Т.
Таким образом, пикселы со значениями 1 отвечают объектам, а пикселы, которым присвоено значение О, соответствуют фону исходного изображения. Если Т является константой (т. е. не зависит от координат (х,у)), то такой порог называется глобальным. Методы выбора глобальных порогов обсуждаются в 3 10.3.1. В 3 10.3.2 рассматриваются способы вариации порогов, которые в этом случае называются локальными или адаптивными.
Рис. 10Л2. Выбор порога на основа- нии визуального анализа бимодаль- ной гистограммы 10.3.1. Обработка с глобальным порогом Один способ выбора порога заключается в визуальном изучении гистограммы изображения. Гистограмма на рис. 10.12 имеет две отчетливые моды, поэтому легко выбрать разделяющий их порог. Другой подход к выбору Т основан на методе проб и ошибок, когда выбираются различные пороги и проверяются до тех пор, пока результат пороговой обработки не станет удовлетворять наблюдателя. Такой метод особенно эффективен при наличии хорошей интерактивной среды исследования, которая позволяет пользователю «двигать» параметры обработки в ручном графическом режиме и наблюдать немедленный результат этих изменений.