Гонсалес Р., Вудс Р., Эддинс С. Цифровая обработка изображений в среде Matlab (2006) (1246139), страница 92
Текст из файла (страница 92)
Массивы Я и Т должны иметь одинаковые размеры (или один из них является скалярным смешанным массивом). Кроме того, они могут быть символьным массивами с правильным числом строк. Команда всгпсшр различает строчные и заглавные буквы. Все начальные и конечные пробелы любой строки участвуют в процедуре сравнения. Функция всгпсшр1 совершает те же действия, что и всгпсшр, но не различает строчные и заглавные буквы. Функция, имеющая синтаксис 1 вег11по(вег, расеегп), ищет в строке всг все вхождения более короткой строки рассегп, возвращая начальный индекс каждого такого вхождения в виде двойного массива 1. Если строка раееегп не обнаружена в всг, то вег11по возвращает пустой массив ( 3.
»» С ~» 5~23) Функция вст)пвС допускает форму вызова Ц = всгйавС(А, 61гесС1оп), где А это символьный массив, а параметр п1гесС1оп может иметь одно из трех значений выравнивания: 'т1яйс', 'Те1с' и 'сепсет'. По умолчанию принято значение 'т1БЬС '. Выходной массив содержит все те же строки, что и А, но они выровнены в соответствии с указанным параметром. Отметим, что выравнивание строк предполагает наличие начальных или конечных пробелов при выполнении предписанной операции. Например, пусть эП» обозначает символ пробела, тогда строка 'ППаЬс' с двумя начальными пробелами не меняется при выравнивании 'т1БЬС', превращается в строку 'аЬсПП' при выравнивании 'Хе1С' и становится строкой 'ПаЬсП' при выравнивании 'сентер'. Ясно, что при отсутствии начальных и конечных пробелов ничего не меняется.
Функция встшаСсЬ, имеющая синтаксис ш = втгшассЬ('втт', БТКБ), просматривает строки символьного массива или смешанного массива строк БТКБ, ища строки, которые начинаются на 'вст', и возвращая индексы найденных строк. Альтернативная форма вызова имеет вид ш = встшатсЬ('втт', БТКБ, 'ехасС'). В этом случае возвращаются лишь индексы, которым соответствуют строки с полным совпадением по 'втг'. Например, команда » ш = вттшаССЬ('шах', вттчсаСОшах', 'ш1п1шах', 'шах1шпш')) возвращает ш = ~1; 3), так как строки 1 и 3 массива, построенного функцией встэсаС, начинаются на 'шах'. С другой стороны, команда » ш = астшассЬОшах', встчсасОшах', 'ш1п1шах', 'шах1шпш'), 'ехасС') возвращает ш = 1,поскольку только строка 1 совпадает в точности с 'шах'. Функция втггер с синтаксисом г = втгтерО вст1', 'втт2', 'вттЗ') заменяет в строке 'вСт1' все вхождения подстроки 'втт2' на подстроку 'вСгЗ'.
Если какая-то переменная из всг1, вСС2 или втгЗ является смешанным массивом строк, эта функция возвращает смещанный массив того же размера, что и всг1, вст2, втгЗ, который получается поэлементным выполнением команды вСттер. Все входные данные должны иметь одинаковый размер (или могут быть скалярным смешанным массивом). Кроме того, любой из них может быть символьным массивом с правильным числом строк. Например, в = ' Тшаяе ргосевв1пБ апп гевтогаС1оа.'; » вст = всггер(в, 'ргосевв1пБ', 'епйалсешепС') ~~~524 Глава 12. Распознавание объектов вСт = 1шабе еппапсешепС апо тевсотаСАоп. Функция встток по команде С = встсоИ 'вст', ое11ш) возвращает первую метку в текстовой строке вСт, то есть первое множество символов до обнаружения ограничителя бе11ш.
Параметр ое11ш является вектором, состоящим из символов-ограничителей (т. е. пробелы, другие символы, строки). Например, » вСт = 'Ап 1шайе 1в ап отаетео веС оХ р1хе1в'; » е[е11ш = [' '); » с = встсок [ест, ое11ш) Ап Заметим, что функция вттток прерывает работу после обнаружения первого ограничителя (в нашем случае это был пробел). Если мы заменим бе11ш на бе11ш [' х '), то получим » С = вттсо)с[ест, бе11ш) Ап 1шайе Ав ап отбетее1 веС оХ р1 Следующее семейство функций из табл. 12.2 совершает преобразования между строками и числами. Функция 1пС2втт, имеющая синтаксис вСт = 1пС2вст[М), конвертирует целые числа в строки с форматом целых чисел. Вход в может быть скаляром, вектором или матрицей целых чисел.
Нецелые числа сначала округляются. Например, 1пС2вст[2 + 3) является строкой 'б'. Для входных матриц или векторов функция 1пС2вСт вОзвращает матрицу строк: » вст = АпС2вст[еуе[3)) апв 1 О О О 1 О О О 1 » с1авв(втт) с'пат Функция шас2вст, имеющая форму вызова вст = шаС2вст[А), преобразует матрицу А в строку, которая годится быть входом функции еоа1 в представлении числовых данных с полной точностью. Расширенный вариант вызова вст = шаС2вст[А, и) преобразует матрицу с точностью с и цифрами. Например, рассмотрим матрицу » А= [1234) А = 1 2 Команда » Ь = шаС2вСт[А) порождает Ь = [1 2;3 4) где Ь вЂ” это строка из 9 символов, включая квадратные скобки, пробелы и точку с запятой. Команда » ена1(шаС2вст[А)) воспроизводит числовую матрицу А.
Другие функции из этого семейства имеют аналогичную интерпретацию. Последняя группа функций из табл. 12.2 относится к преобразованиям систем счисления. Например, функция йес2Ьаве, имеющая синтаксис вСг = йес2Ьаве[6, Ьаве), преобразует десятичные числа в числа с заданной системой счисления по основанию Ьаве, где й — это неотрицательное целое меньше, чем 2 52, а Ьаве должно быть целым между 2 и 36. Возвращаемый аргумент вст является символьной строкой. Например, следующая команда преобразует 23~с к числу по основанию 2 и возвращает результат в виде строки: » вСг = йес2Ьаве(23, 2) вст 10111 » с1аев[вСг) сЬаг Используя формулу вст = йес2Ьаве[6, Ьаве, и), получаем представление не более чем с и цифрами.
(526 ы 1Й.» б* 12.4.2. Сопоставление строк Наряду с функциями сопоставления и сравнения из табл. 12.2, часто бывает полезно уметь вычислять меру схожести символьных строк, которая вела бы себя аналогично расстоянию, обсуждавшемуся в я 12.2. Мы проиллюстрируем такой подход с помощью определяемой ниже меры близости. Пусть имеется две границы областей а и 6, которые закодированы, соответственно, с помощью строк а»аз... а и 6»Ьз... 6„. Пусть а обозначает число совпадений между этими двумя строками, причем совпадение в некоторой й-ой позиции имеет место, если аь = Ьы Тогда число несовпадающих символов равно ~3 = шахЦо), (Ь|) — с», где ~агя~ обозначает длину (число символов) строки в аргументе.
Можно показать, что Д = О, если, и только если а и 6 являются идентичными строками. Простейшая мера схожести строк а и Ь равна дроби ~3 шах()а(, (6)) — а Эта мера была предложена в работе [Вяе, Уапя, 198Ц. Она равна бесконечности при полном совпадении строк и равна О,когда нет ни одного совпадения между а и Ь (в этом случае а равно О). Поскольку сопоставление производится между соответствующими символами, необходимо, чтобы все строки «регистрировались» некоторым общим способом, не зависящим от положения символов, в противном случае такой метод сравнения не будет иметь смысла.
Один способ регистрации двух строк заключается в сдвигах одной строки относительно другой до тех пор, пока величина Й не станет максимальной. Эту и некоторые другие похожие стратегии можно реализовать на базе некоторых операций над строками, перечисленными в табл. 12.2. Обычно более эффективный подход состоит в нахождении некоторой начальной точки для кал,дой строки на основе нормировки границ относительно размера и ориентации перед тем,как строить ее представление в виде строки символов.
Такой подход иллюстрируется в примере 12.3. Следующая функция вычисляет предложенную выше меру схожести для двух строк символов. ХппсС1оп К = ясгв1ш11аг1Су(а, Ь) %БТКЯ1М1ЕАК1ТУ СошрпСев а в1ш11аг1Су шеавпге Ьесяееп Сво всг1пбя. % К = ЯТКБ1М1ЬАК1ТУ(А, В) сошрпсев СЬе в1ш11агАСу шеавпге, К, % Яе11пей 1п ЯесСАоп 12.4.2 1ог всг1пбв А впй В. ТЬе всг1пйв Яо поС % Ьаче Со Ье о1 СЬе ваше 1епЯСЬ, Ьпс И опе 1в вЬогСег СЬап оСЬег, % СЬеп 1С Ая взявшей СЬаС СЬе вЬогСег всг1пЯ Ьая Ьееп раИей яАСЬ % 1еай1пЯ Ь1апйя во СЬаС АС Ав ЬгопЯЬС Апсо СЬе песевяагу % гея1всгаС1оп рг1ог Со пя1пя сЬАв ХппсС1оп.
Оп1у опе оХ СЬе % всг1пЯв сяп Ьаче Ь1апйв, апб СЬеве шпвС Ье 1еао1пЯ апд/ог % Сга111пЯ Ь1апйв. В1апйв аге поС соппсей вЬеп сошрпС1пЯ СЬе 1епЯСЬ % о1 СЬе ясг1пбв 1ог пве гп СЬе в1ш11агАСу шеавиге. '/ Чет1ту СЬаС а апо Ь зте сЬагассег вст1пиз. 11 1всЬат(а) ) 1зсЬат(Ь) еттот('1прпсв шпвС Ье сЬатассет вст1пйв.') епс( '/ Рйпа апу Ь1ап)с врасев. 1 = 11пб(а == ' '); 3 = 11па(Ь == ' '); Е1 1ещСЬ(1); ЕЛ 1епкСЬ(Э); 1т ь1 = О в ьЭ = О еттот('Оп1у опе оХ СЬе вст1пив сап сопза1п Ь1апКв.') ети1 '/ Рао СЬе епб о1 СЬе аррторт1аСе вст1пи. 1С 1в аввишеб '/ СЬаС СЬеу ате теб1зсетей 1п Сетшв о1 СЬейт Ье31пп1пи '/ ров1С1опз. а = а(:); Ь = Ь(:); 1.а = 1епяСЬ(а); 1.Ь = 1епкСЬ(Ъ); 11 11 == О й ЬЛ == О 11 Ьа ) ЬЬ Ь = [Ь; Ь1ап1сз(1.а — 1Ь) '); е1зе а = [а; Ь1апЫв(1.Ь вЂ” 1.а)'); епй е1ве11 1зешрсу(1) 1.Ь = 1епйСЬ(Ь) — 1епйСЬ(3); Ь = [Ь; Ь1ыйсв(1.а — 1.Ь вЂ” 1.Э) '); е1ве Еа = 1епиСЬ(а) — 1епбСЬ(1); а = [а; Ь1апЫз(ЬЪ - Еа — 11)'); епа % Сошрпсе СЬе в1ш11ат1Су шеавите.
1 = 11пб(а == Ь); а1рЬа = 1епиСЬ(1); беп = шах(1а, ЬЬ) — а1рЬа; 11 беп == О К= 1Ы,' е1ве К = а1рЬа/беп; епб Пример 12.3. Распознавание обвектов на основе сопостаавленил строк. На рис. 12.3, а) и г), показаны силуэты двух типов тарных банок, у которых принципиальное отличие форм состоит в изгибе боковой поверхности. Чтобы различать эти формы, мы будем относить объект с кривой боковой поверхностью на рис.
12.3, а) к классу 1, а на рис. 12.3, г) — к классу 2. Оба изображения имеют размеры 372х372 пиксела. ~~~ $28 Глава 12. Распознавание обвектов ц Рис. 12.3. а) Объект. б) Его ломаная минимальной длины, полученная функцией нтлрегроту с размером ячеек а в) Типичная зашумленвая граница. г)-е) Те же изображения для другого объекта Чтобы продемонстрировать зффективпость меры В для дифференциации объектов классов 1 и 2, границы зтих объектов приближаются ломаной лтинимальной длины с помощью функции шапрегро1у (см.