Гонсалес Р., Вудс Р., Эддинс С. Цифровая обработка изображений в среде Matlab (2006) (1246139), страница 17
Текст из файла (страница 17)
Все входные параметры функции 1шас[]ивс, за иск;почением х, должны быть вещественными числами в интервале от 0 до 1, независимо от класса Х. Если Х принадлежит классу и1пс8, функция 1шаб]ивс умножает эти параметры на 255 для задания истинных величин, которые будут использоваться; если Х вЂ” класса и1пс16, то все умножается на 65535. Если вместо векторов [1он 1п, МяЬ 1п] или [1оя оис, Ь1яЬ оцт] поставить пустой вектор [[ ]), то будут использоваться величины по уаиолчанию, равные [О 1].
Если Ь1яЬ оис меньше, чем 1он оитч то выходные яркости симметрично переворачиваются. Рис. Зль Различные отобра- а) женин, допустимые в функции гааа]пве б) Пример 3.1. !Трименение функции [шаб]цвт. На рис. 3.3, а) приведена цифровая рентгенограмма молочной железы 1, демон- стрирующая небольшое поражение ткани этого органа, а на рис.
3.3, б) дано его негативное изображение, полученное по команде » я1 = 1шаб]цвс[Х, [О 1], [1 О]); Эта процедура, которая является цифровым эквивалентом получения фотонегатива, является весьма полезной для усиления белых или серых участков, окруженных большими, преимущественно темными, областями. Отметим, насколько легче в этом случае анализировать ткань грудной железы по рис. 3.3, б). Негативное изображение можно легко построить также с помощью функции 1шсошр1ешепв из пакета 1РТ: я = 1шсошр1ешепв[Х) . На рис. 3.3, в) приведен результат команды » к2 = 1шааОцвс[у, [О.б 0.76], [1 0]); Параметр яашша служит для задания формы кривой, отображающей яркость Х в яркость я. Если яашша меньше 1, то яркость отображения смещается вверх в сторону более ярких значений, как показано на рис.
3.2, а). Если явшша больше 1, то яркость отображения смещается вниз в сторону менее ярких значений. Если параметр яашша опущен, то его значение по умолчанию равно 1 (линейное отображение) . б.б. П б б 5~~3~ » 8в = 1ш2и1пс8(шас28тау(8)); Применение шас28тау переводит величины в диапазон ~0, 1~, а функция 1ш2нйпс8 преобразует их к диапазону [О, 2551 В следующем параграфе мы обсудим функ- цию масштабирования, которая автоматически определяет класс входных дан- ных, а затем выполняет подходящее обращение.
Рмс. В.4. а) Преобразование рас- тнженнн контрастнастн. б) Поро- говое преобрезованне а) 5 = Тбг) 6) 5 = Т(г) г бл Темное «-в Светлое ш Темное «-~ Светлое Функция, показанная на рис. 3.4, а), называется функцией преобразования растяжения конглрастяосгли, поскольку она сжимает входные величины, меньшие чем т, в более узкий поддиапазон темных уровней на выходном изображении, и, соответственно, величины, большие пт, — в более узкую полосу ярких уровней. В результате получается изображение с большей контрастностью. На самом деле, в предельном случае, показанном на рис.
3.4, б), выходом служит двоичное (черно-белое) изображение. Эта предельная функция, называемая пороговой, является простейшим инструментом при сегментации изображений, которое обсуждается в гл. 10. Используя обозначение, введенное в начале параграфа 3.2, функцию на рис. 3.4, а) можно записать в виде в = ТЯ = 1 1+ (тп)г)о где г — это яркость входного изображения, в — соответствующая яркость выходного изображения, а параметр Е контролирует наклон функции. Это уравнение а верхние — в 1. Отметим, однако, что форма гамма-кривой является переменной, в то время как форма функции 1о8 зафиксирована.
Основное применение логарифмического преобразования состоит в сжатии динамического диапазона. Например, спектр Фурье часто имеет диапазон величин от 0 до 10е н даже выше. Если линейно масштабировать этот диапазон в интервал с 8-ми битной градацией, то при визуализации наиболее яркие пикселы будут доминировать, что приведет к утере деталей менее ярких участков спектра. Если применить функцию 1о8, то динамический диапазон с амплитудой, например, 10в, сократится примерно до 14, что намного удобнее. При выполнении логарифмических преобразований часто бывает необходимо возвращать сжатый диапазон назад к исходному значению.
Для 8 бит такое действие в МАТЮКАВ можно совершить командой с ~~В4 !:~ и ~ ! Т7р~ос~а тьати мрьл ии июфи лнни ~, прюоцаюн~а~юии фиы«рац~~ч ~ф ;~с":~,!ил~"р х зи МЛ'Г1.Л13 в ни м <ля:р~олк'й крчлупч ~кицймугки ~лтс~ ч- ",т ",». ~ «', болыпей концентрации внимания на основных структурах, это будет последний параграф, где разбираются приемы проверки возможных ошибок. Все эти процедуры являются весьма типичными при программировании на языке МАТЬАВ. Использование переменного числа входных и выходных данных Для определения числа входных аргументов М-функции используется функция пагя1п, и = пагя1п, которая возвращает фактическое число входных аргументов функпии. Аналогично, функция пагяопс определяет число выходных аргументов.
Она имеет синтаксис и = пагяопс. Например, пусть выполнена команда со следующей М-функцией: » Т = СевСЬч(4, 5); Использование в теле этой функции команды пагя1п даст результат 2, а применение функции пагяопс выдаст 1. Функцию пагясЬЬ можно применять в теле М-функций для проверки корректности числа передаваемых аргументов. Она имеет синтаксис швя = пагясЬЬ(1оч, Ь1яЬ, пшпЬег). Эта функция выдает сообщениевос епопяЬ 1прпг рагашегегв,еслиппшЬегменьше, чем 1оч или Тоо шалу тпрпс рагашесегв, если шввЬег болыпе, чем Ь1яЬ.
Если параметр пвшЬег находится между 1оч и Ь1яЬ (включая эти значения),то пагясЬК возвращает пустую матрицу. Обычно функция пагЕсЬЬ используется для остановки вычислений (через функцию еггог) при обнаружении неправильного числа входных аргументов. Число фактических входных аргументов устанавливается функцией пагя1п. Например, разберем следующий фрагмент кода: Хппсг1оп С = СевсЬч2(х, у, в) еггог(пагясЬЬ(2, 3, пагя1п)); Если теперь набрать команду » севсЬч(б); в которой имеется всего один входной аргумент, то это породит сообщение об ошибке вос епопяЬ 1прпг рагашесегв, и вычисления будут прерваны.
Часто бывает удобно писать функции с переменным числом входных и~или выходных данных. Для этого следует использовать аргументы чагагя1п и чагагяопс, которые необходимо набирать строчными буквами. Например, запись Тппссгоп (ш, п) = севсЬчЗ(чагагя1п) допускает переменное число входных аргументов при вызове функции севсЬчЗ, а запись гплсс1оп [чагагяопс] = севсЬч4(ш, и, р) возвращает переменное число выходных аргументов для функции севсЬч4. Если функция СеяСЬчЗ, скажем, имеет один фиксированный входной аргумент х, за которым следует переменное число других входных аргументов, то запись Хцпсс1оп [ш, и] = сеясЬчЗ(х, чагагбгп) позволит пользователю выбирать разное число входных аргументов по своему усмотрению, начиная со второго аргумента.
Допускается иметь функции, у которых переменно число и входных, и выходных аргументов. При использовании чагаг51п во входных аргументах функции МАТ[ АВ формирует соответствующий смешанный массив (се!1 аггау, см. З 2.10.5), который допускает переменное число входных данных. Поскольку переменная чагаг51п является смешанным массивом, при вызове такой функции в ее аргументах могут стоять данные разных типов. Например, при обращении к нашей гипотетической функции сеесЬчЗ, снабженной этой переменной, вполне допустимым будет обращение типа )> [ш, и] = сеясЬч(Х, [О 0.5 1.5], А, '1аЬе1'); где Х вЂ” это изображение, следующий аргумент — это вектор-строка длины 3, А— матрица, а '1аЬе1' — это строка символов.
Такая организация данных является очень мощным средством, которая позволяет существенно упростить структуру функций, которым необходимо много входных аргументов. То же в полной мере относится и к использованию переменной чагагяоцС. М-функция преобразования яркостпи В этом параграфе будет представлена функция, которая реализует следующие преобразования: обращение, 1оя, яапппа и растяжение контрастности. Эти преобразования нам еще понадобятся в дальнейшем изложении материала. Кроме того, они прекрасно иллюстрируют процесс конструирования М-функций для преобразования яркости.
При написании этой функции мы воспользовались функцией сЬвпбес1аяя~, которая имеет синтаксис 5 = ссЬаляес1аее(пеис1авв, Х) Эта функция конвертирует входное изображение Х в изображение 5, класс которого предписан переменной пеис1авв. Допустимые значения для пенс1аяв: гп1пСЗ', 'пспС18' и 'йопЬ1е'. В следующей М-функции, которую мы назовем 1псгапв, обратите внимание на то, как ее использование описано в тексте справки, а также на то,как реализуется возможность переменного числа входных аргументов, как закладывается ~Функция свавйес1авв является недокументированной утилитой 1РТ. Ее код имеется в прило- лсении С. З.й П б б В~~У) проверка ошибок и как устанавливается согласование классов входных и выходных изображений.
Не забудьте, что переменная чататя1п является смешанным массивом, поэтому его элементы следует окружать фигурными скобками. Хппсс1оп Я = тпттапз(1, нататбсп) %1ИТКАМЯ Рет1отшв злсепятсу (Ятау-1ене1) стапя1отшас1опз. % С = 1ИТКАМЯ(Р, 'пеЯ') сошрпСев СЬе пеЯаСАче о1 1прпС АшаЯе Р. у % С = 1КТКАМЯ(Р, '1оЯ', С, СЬАЯЯ) сошрпсев Се1об(1 + Р) ялб % шп1САР11ев сЬе тевп1с Ьу (ров1ссче) сопвсапс С. 11 сЬе 1азс сыа '/ раташесетя ате ош1ССеб, С бе1ап1св Со 1.
Весапве СЬе 1оЯ 1в пвеб % 1теопепс1у Со 61зр1ау Ропт1ет вресста, раташесет СЬАЯЯ о11етя СЬе % орС1оп Со врес11у СЬе с1азв оХ СЬе оптрпс ав 'п1пСЯ' от % 'п1пс16'. 11 раташесет СЬАЯЯ Ая ош1ссеб, СЬе опсрпс 1в о1 сЬе '/ ваше с1авя ая СЬе 1прпс. '/ % С = 1МТКАМЯ(Р, 'Яашша', САМ) рет1отшв а Яашша стапвХотшас1оп оп '/ СЬе Тпрпс Ашабе пз1пЯ раташеСет САМ (а тес(пбтеб 1прпС) . % '/ С = 1ИТКАИЯ(Р, 'встессЬ', М, Е) сошрпсея а сопставс-встессЬАпЯ % стапв1отшас1оп пв1пЯ сЬе ехртевв1оп 1./(1 + (М./(Р + % ерз)).