Основы оцифровки. Типы сканирующих устройств. Установка свойств отображения. Описание типа преобразований

Рынок мобильных телефонов заполнен моделями с камерами с огромными разрешениями. Встречаются даже относительно недорогие смартфоны с сенсорами разрешением 16-20 Мп. Незнающий покупатель гонится за "крутой" камерой и отдает предпочтение тому телефону, у которого разрешение камеры выше. Он даже и не догадывается, что попадается на удочку маркетологов и продавцов.

Что такое разрешение?

Разрешение камеры - это параметр, который указывает на конечный размер изображения. Он определяет только то, насколько полученное изображение будет большим, то есть его ширину и высоту в пикселях. Важно: качество картинки при этом не изменяется. Фотография может получиться некачественной, но большой из-за разрешения.

Разрешение не влияет на качество. Нельзя было не упомянуть об этом в контексте интерполяции камеры смартфона. Теперь можно переходить непосредственно к сути.

Что такое интерполяция камеры в телефоне?

Интерполяция камеры - это искусственное увеличение разрешения изображения. Именно изображения, а не То есть это специальное программное обеспечение, благодаря которому снимок с разрешением 8 Мп интерполируется до 13 Мп или больше (или меньше).

Если проводить аналогию, то интерполяция камеры подобна или биноклю. Эти устройства увеличивают изображение, но не делают его более качественным или детализированным. Так что если в характеристиках к телефону указана интерполяция, то фактическое разрешение камеры может быть ниже заявленного. Это не плохо и не хорошо, это просто есть.

Для чего это нужно?

Интерполяцию придумали для увеличения размера изображения, не более того. Сейчас это уловка маркетологов и производителей, которые пытаются продать продукт. Они большими цифрами указывают на рекламном постере разрешение камеры телефона и позиционируют это как преимущество или нечто хорошее. Мало того, что само по себе разрешение не оказывает влияния на качество фотографий, так оно еще может быть интерполировано.

Буквально 3-4 года тому назад многие производители гнались за количеством мегапикселей и разными способами пытались впихнуть их в свои смартфоны сенсоры с как можно большим числом. Так появлялись смартфоны с камерами с разрешением 5, 8, 12, 15, 21 Мп. Фотографировать они при этом могли как самые дешевые мыльницы, но покупатели, увидев наклейку "Камера на 18 Мп", сразу хотели купить такой телефон. С появлением интерполяции продавать такие смартфоны стало проще из-за возможности искусственно добавить мегапикселей камере. Конечно, качество фото со временем начало расти, но точно не из-за разрешения или интерполяции, а из-за естественного прогресса в плане разработки сенсоров и программного обеспечения.

Техническая сторона

Что такое интерполяция камеры в телефоне технически, ведь весь текст выше описывал только основную идею?

С помощью специального программного обеспечения на изображении "рисуются" новые пиксели. Например, для увеличения изображения в 2 раза после каждой строки пикселей картинки добавляется новая строка. Каждый пиксель в этой новой строке заполняется цветом. Цвет заливки высчитывается специальным алгоритмом. Самый первый способ - залить новую строку цветами, которыми обладают ближайшие пиксели. Результат такой обработки будет ужасным, но зато подобный способ требует минимум вычислительных операций.

Чаще всего используется другой метод. То есть на исходное изображение добавляются новые строки пикселей. Каждый пиксель заливается цветом, который, в свою очередь, вычисляется как среднее значение соседних пикселей. Этот способ дает лучшие результаты, но требует больше вычислительных операций.

Благо, современные мобильные процессоры быстры, и на практике пользователь не замечает, как программа редактирует изображение, пытаясь искусственно увеличить его размер.

Есть много продвинутых способов и алгоритмов интерполяции, которые совершенствуются постоянно: улучшаются границы перехода между цветами, линии становятся более точными и четкими. Неважно, как построены все эти алгоритмы. Сама идея интерполяции камеры банальна и вряд ли приживется в ближайшем будущем. С помощью интерполяции невозможно сделать изображение более детализированным, добавить новые детали или улучшить его каким-либо еще образом. Только в фильмах маленькая размытая картинка после наложения пары фильтров становится четкой. На практике такого быть не может.

Нужна ли вам интерполяция?

Многие пользователи по своему незнанию задают на разных форумах вопросы, как сделать интерполяцию камеры, полагая, что это улучшит качество изображений. На самом деле интерполяция не только не улучшит качество картинки, но даже может сделать хуже, ведь к фотографиям будут добавляться новые пиксели, и из-за не всегда точного вычисления цветов для заливки на фото могут быть недетализированные участки, зернистость. В результате качество падает.

Так что интерполяция в телефоне - это маркетинговая уловка, которая совершенно не нужна. Она может увеличивать не только разрешение фото, но и стоимость самого смартфона. Не попадайтесь на уловки продавцов и производителей.

Почему изображение, масштабированное с бикубической интерполяцией, выглядит не как в Фотошопе. Почему одна программа ресайзит быстро, а другая - нет, хотя результат одинаковый. Какой метод ресайза лучше для увеличения, а какой для уменьшения. Что делают фильтры и чем они отличаются.

Вообще, это было вступлением к другой статье, но оно затянулось и вылилось в отдельный материал.

Этот человек сидит среди ромашек, чтобы привлечь ваше внимание к статье.

Для наглядного сравнения я буду использовать изображения одинакового разрешения 1920×1280 (одно , второе), которые буду приводить к размерам 330×220, 1067×667 и 4800×3200. Под иллюстрациями будет написано, сколько миллисекунд занял ресайз в то или иное разрешение. Цифры приведены лишь для понимания сложности алгоритма, поэтому конкретное железо или ПО, на котором они получены, не так важно.

Ближайший сосед (Nearest neighbor)

Это самый примитивный и быстрый метод. Для каждого пикселя конечного изображения выбирается один пиксель исходного, наиболее близкий к его положению с учетом масштабирования. Такой метод дает пикселизированное изображение при увеличении и сильно зернистое изображение при уменьшении.

Вообще, качество и производительность любого метода уменьшения можно оценить по отношению количества пикселей, участвовавших в формировании конечного изображения, к числу пикселей в исходном изображении. Чем больше это отношение, тем скорее всего алгоритм качественнее и медленнее. Отношение, равное одному, означает что как минимум каждый пиксель исходного изображения сделал свой вклад в конечное. Но для продвинутых методов оно может быть и больше одного. Дак вот, если например мы уменьшаем изображение методом ближайшего соседа в 3 раза по каждой стороне, то это соотношение равно 1/9. Т.е. большая часть исходных пикселей никак не учитывается.




1920×1280 → 330×220 = 0,12 ms
1920×1280 → 1067×667 = 1,86 ms

Теоретическая скорость работы зависит только от размеров конечного изображения. На практике при уменьшении свой вклад вносят промахи кеша процессора: чем меньше масштаб, тем меньше данных используется из каждой загруженной в кеш линейки.

Метод осознанно применяется для уменьшения крайне редко, т.к. дает очень плохое качество, хотя и может быть полезен при увеличении. Из-за скорости и простоты реализации он есть во всех библиотеках и приложениях, работающих с графикой.

Аффинные преобразования (Affine transformations)

Аффинные преобразования - общий метод для искажения изображений. Они позволяют за одну операцию повернуть, растянуть и отразить изображение. Поэтому во многих приложениях и библиотеках, реализующих метод аффинных преобразований, функция изменения изображений является просто оберткой, рассчитывающей коэффициенты для преобразования.

Принцип действия заключается в том, что для каждой точки конечного изображения берется фиксированный набор точек исходного и интерполируется в соответствии с их взаимным положением и выбранным фильтром. Количество точек тоже зависит от фильтра. Для билинейной интерполяции берется 2x2 исходных пикселя, для бикубической 4x4. Такой метод дает гладкое изображение при увеличении, но при уменьшении результат очень похож на ближайшего соседа. Смотрите сами: теоретически, при бикубическом фильтре и уменьшении в 3 раза отношение обработанных пикселей к исходным равно 4² / 3² = 1,78. На практике результат значительно хуже т.к. в существующих реализациях окно фильтра и функция интерполяции не масштабируются в соответствии с масштабом изображения, и пиксели ближе к краю окна берутся с отрицательными коэффициентами (в соответствии с функцией), т.е. не вносят полезный вклад в конечное изображение. В результате изображение, уменьшенное с бикубическим фильтром, отличается от изображения, уменьшенного с билинейным, только тем, что оно еще более четкое. Ну а для билинейного фильтра и уменьшения в три раза отношение обработанных пикселей к исходным равно 2² / 3² = 0.44, что принципиально не отличается от ближайшего соседа. Фактически, аффинные преобразования нельзя использовать для уменьшения более чем в 2 раза. И даже при уменьшении до двух раз они дают заметные эффекты лесенки для линий.

Теоретически, должны быть реализации именно аффинных преобразований, масштабирующие окно фильтра и сам фильтр в соответствии с заданными искажениями, но в популярных библиотеках с открытым исходным кодом я таких не встречал.




1920×1280 → 330×220 = 6.13 ms
1920×1280 → 1067×667 = 17.7 ms
1920×1280 → 4800×3200 = 869 ms

Время работы заметно больше, чем у ближайшего соседа, и зависит от размера конечного изображения и размера окна выбранного фильтра. От промахов кеша уже практически не зависит, т.к. исходные пиксели используются как минимум по двое.

Мое скромное мнение, что использование этого способа для произвольного уменьшения изображений попросту является багом , потому что результат получается очень плохой и похож на ближайшего соседа, а ресурсов на этот метод нужно значительно больше. Тем не менее, этот метод нашел широкое применение в программах и библиотеках. Самое удивительное, что этот способ используется во всех браузерах для метода канвы drawImage() (наглядный пример), хотя для простого отображения картинок в элементе используются более аккуратные методы (кроме IE, в нем для обоих случаев используются аффинные преобразования). Помимо этого, такой метод используется в OpenCV, текущей версии питоновской библиотеки Pillow (об этом я надеюсь написать отдельно), в Paint.NET.

Кроме того, именно этот метод используется видеокартами для отрисовки трехмерных сцен. Но разница в том, что видеокарты для каждой текстуры заранее подготавливают набор уменьшенных версий (mip-уровней), и для окончательной отрисовки выбирается уровень с таким разрешением, чтобы уменьшение текстуры было не более двух раз. Кроме этого, для устранения резкого скачка при смене mip-уровня (когда текстурированный объект приближается или отдаляется), используется линейная интерполяция между соседними mip-уровнями (это уже трилинейная фильтрация). Таким образом для отрисовки каждого пикселя трехмерного объекта нужно интерполировать между 2³ пикселями. Это дает приемлемый для быстро движущейся картинки результат за время, линейное относительно конечного разрешения.

Суперсемплинг (Supersampling)

С помощью этого метода создаются те самые mip-уровни, с помощью него (если сильно упростить) работает полноэкранное сглаживание в играх. Его суть в разбиении исходного изображения по сетке пикселей конечного и складывании всех исходных пикселей, приходящихся на каждый пиксель конечного в соответствии с площадью, попавшей под конечный пиксель. При использовании этого метода для увеличения, на каждый пиксель конечного изображения приходится ровно один пиксель исходного. Поэтому результат для увеличения равен ближайшему соседу.

Можно выделить два подвида этого метода: с округлением границ пикселей до ближайшего целого числа пикселей и без. В первом случае алгоритм становится малопригодным для масштабирования меньше чем в 3 раза, потому что на какой-нибудь один конечный пиксель может приходиться один исходный, а на соседний - четыре (2x2), что приводит к диспропорции на локальном уровне. В то же время алгоритм с округлением очевидно можно использовать в случаях, когда размер исходного изображения кратен размеру конечного, или масштаб уменьшения достаточно мал (версии разрешением 330×220 почти не отличаются). Отношение обработанных пикселей к исходным при округлении границ всегда равно единице.




1920×1280 → 330×220 = 7 ms
1920×1280 → 1067×667 = 15 ms
1920×1280 → 4800×3200 = 22,5 ms

Подвид без округления дает отличное качество при уменьшении на любом масштабе, а при увеличении дает странный эффект, когда большая часть исходного пикселя на конечном изображении выглядит однородной, но на краях видно переход. Отношение обработанных пикселей к исходным без округления границ может быть от единицы до четырех, потому что каждый исходный пиксель вносит вклад либо в один конечный, либо в два соседних, либо в четыре соседних пикселя.




1920×1280 → 330×220 = 19 ms
1920×1280 → 1067×667 = 45 ms
1920×1280 → 4800×3200 = 112 ms

Производительность этого метода для уменьшения ниже, чем у аффинных преобразований, потому что в расчете конечного изображения участвуют все пиксели исходного. Версия с округлением до ближайших границ обычно быстрее в несколько раз. Также возможно создать отдельные версии для масштабирования в фиксированное количество раз (например, уменьшение в 2 раза), которые будут еще быстрее.

Данный метод используется в функции gdImageCopyResampled() библиотеки GD, входящей в состав PHP, есть в OpenCV (флаг INTER_AREA), Intel IPP, AMD Framewave. Примерно по такому же принципу работает libjpeg, когда открывает изображения в уменьшенном в несколько раз виде. Последнее позволяет многим приложениям открывать изображения JPEG заранее уменьшенными в несколько раз без особых накладных расходов (на практике libjpeg открывает уменьшенные изображения даже немного быстрее полноразмерных), а затем применять другие методы для ресайза до точных размеров. Например, если нужно отресайзить JPEG разрешением 1920×1280 в разрешение 330×220, можно открыть оригинальное изображение в разрешении 480×320, а затем уменьшить его до нужных 330×220.

Свертки (Convolution)

Этот метод похож на аффинные преобразования тем, что используются фильтры, но имеет не фиксированное окно, а окно, пропорциональное масштабу. Например, если размер окна фильтра равен 6, а размер изображения уменьшается в 2,5 раза, то в формировании каждого пикселя конечного изображения принимает участие (2,5 * 6)² = 225 пикселей, что гораздо больше, чем в случае суперсемплинга (от 9 до 16). К счастью, свертки можно считать в 2 прохода, сначала в одну сторону, потом в другую, поэтому алгоритмическая сложность расчета каждого пикселя равна не 225, а всего (2,5 * 6) * 2 = 30. Вклад каждого исходного пикселя в конечный как раз определяется фильтром. Отношение обработанных пикселей к исходным целиком определяется размером окна фильтра и равно его квадрату. Т.е. для билинейного фильтра это отношение будет 4, для бикубического 16, для Ланцоша 36. Алгоритм прекрасно работает как для уменьшения, так и для увеличения.




1920×1280 → 330×220 = 76 ms
1920×1280 → 1067×667 = 160 ms
1920×1280 → 4800×3200 = 1540 ms

Скорость работы этого метода зависит от всех параметров: размеров исходного изображения, размера конечного изображения, размера окна фильтра.

Именно этот метод реализован в ImageMagick, GIMP, в текущей версии Pillow с флагом ANTIALIAS.

Одно из преимуществ этого метода в том, что фильтры могут задаваться отдельной функцией, никак не привязанной к реализации метода. При этом функция самого фильтра может быть достаточно сложной без особой потери производительности, потому что коэффициенты для всех пикселей в одном столбце и для всех пикселей в одной строке считаются только один раз. Т.е. сама функция фильтра вызывается только (m + n) * w раз, где m и n - размеры конечного изображения, а w - размер окна фильтра. И наклепать этих функций можно множество, было бы математическое обоснование. В ImageMagick, например, их 15. Вот как выглядят самые популярные:

Билинейный фильтр (bilinear или triangle в ImageMagick)


Бикубический фильтр (bicubic , catrom в ImageMagick)


Фильтр Ланцоша (Lanczos)

Примечательно, что некоторые фильтры имеют зоны отрицательных коэффициентов (как например бикубический фильтр или фильтр Ланцоша). Это нужно для придания переходам на конечном изображении резкости, которая была на исходном.

Подождите! Мы кое о чем забыли! До этих пор мы говорили о "реальном", или оптическом разрешении (несмотря на то, что оно может быть не таким реальным, как вы думали). Разрешающую способность можно также подделать с помощью различных математических алгоритмов, дающих кажущееся разрешение, которое выше, чем та цифра, которая называется для оптического разрешения. Этот процесс называется интерполяцией.

В старые недобрые времена многие продавцы предпочли бы называть в качестве спецификации интерполированное значение разрешающей способности, если бы они его знали. В то время разрешающая способность была ниже (до появления доступных пленочных сканеров), поэтому искушение было очень велико. Так у планшетных сканеров, которые используются для получения изображений фотографий и подобных продуктов, реальное оптическое разрешение могло быть 300x300 выборок на дюйм. С помощью магии интерполяции тот же самый сканер мог выдавать поддельное разрешение в 600x600 выборок на дюйм или даже 1200x1200 выборок на дюйм. И именно это рекламировали бы продавцы. Доверчивые покупатели могли бы думать, что они покупают сканер с разрешением 1200x1200 выборок на дюйм, тогда как большая часть дополнительной четкости была бы математическим "шаманством".

К счастью, такими махинациями почти никто не занимается. Все продавцы в качестве первостепенной спецификации четкости называют оптическое разрешение своих сканеров, несмотря на то, что, как вы видели, и оптическое разрешение может не вполне точно отражать разрешающую способность сканера. Интерполированное разрешение скрыто в других спецификациях таким образом, чтобы они казались намного менее обманчивыми.

Даже при всем этом многие пользователи сканеров не вполне понимают, что такое интерполяция, и либо слишком сильно доверяют ей, либо, наоборот, слишком мало. На самом деле, хотя интерполированное разрешение не так хорошо, как оптическое, при правильном применении оно может оказаться достаточно полезным.

Интерполяция - это не что другое, как процесс, который во время сканирования применяется для изменения размеров изображения (в большую или меньшую сторону) или насыщенности цвета на какое-то другое значение, отличное от размера или насыщенности цвета оригинала. Хотя интерполяцией можно пользоваться для изменения информации о цвете или уменьшения отсканированного изображение по сравнению с оригиналом, в большей части случаев разговоры об интерполяции касаются изображения, на котором создаются новые пиксели, в результате чего конечное изображение становится больше отсканированного оригинала или получает большее разрешение. (Интерполяцию, которая используется для уменьшения изображения, обычно называют субдискретизацией.)

Не путайте интерполяцию с изменением масштаба. При увеличении масштаба изображения каждый пиксель дублируется определенное количество раз. Чтобы увеличить размер изображения втрое, каждый пиксель дублируется трижды. То же самое происходит при уменьшении масштаба изображения. При простом изменении масштаба уменьшение размера изображения на одну треть от оригинала означает отбрасывание каждого третьего пикселя (в надежде, что оставшиеся пиксели все-таки сохранят некое подобие оригинала). В любом случае на получившемся изображении, скорее всего, будут грубые края или "лесенки" на диагональных линиях.

Интерполяция - процесс намного более сложный. Вместо простого копирования пикселей используются интерполяционные алгоритмы, изучающие соседние пиксели и рассчитывающие новые, которые подгоняются так, чтобы переход между ними был как можно незаметнее, в идеальном случае формируя непрерывный переход от старых пикселей к новым. Упрощенно этот процесс можно описать следующим образом. Если на изображении был черный пиксель, а рядом с ним - белый, то при увеличении масштаба в два раза получилось бы два черных пикселя и два белых пикселя. При интерполяции мы получим исходные черный и белый пиксели, плюс один темно-серый пиксель и один светло-серый пиксель между ними, как показано на рис. 3.3.

Существуют различные способы интерполяции изображений, некоторые из них достаточно сложны. Ниже приводятся три самых распространенных метода.

- Метод ближайших соседей . При этом методе рассматривается пиксель, находящийся в непосредственной близости от обрабатываемого, и информация об этом пикселе используется для создания нового.

Поскольку в таком случае нужно проверять только каждый второй пиксель, это достаточно быстрый метод, хотя и не очень точный. Он не подходит для большей части фотографических изображений, содержащих плавные переходы между отдельными участками, поскольку дает в них заметно более зубчатые края. Если вы сканируете изображение с четкими границами, например, фрагмент текста или изображение, которое будет сохраняться в формате GIF, алгоритм ближайших соседей будет вполне пригоден. В таких случаях он дает меньшие файлы, при этом эффективно сохраняя резкие границы. На рис. 3.4 изображена буква А (один из типов изображений, для которых достаточно хорошо работает алгоритм ближайших соседей), а на рис. 3.5 показана увеличенная на 600% часть этой буквы после обработки с помощью данного.

- Билинейный метод . При этом методе проверяются пиксели по обе стороны от обрабатываемого пикселя. Он выполняется немного медленнее, чем алгоритм ближайших соседей, но может давать достаточно хорошие результаты для изображений, содержащих высококонтрастные элементы. Действие соответствующего алгоритма показано на рис. 3.6.

- Бикубический метод . Самый распространенный метод интерполяции - бикубический, при котором для получения информации для создания новых, интерполированных пикселей, проверяются все окружающие пиксели. Этот метод используется по умолчанию во многих сканерах, а также в Photoshop. В последней версии Photoshop к основному алгоритму бикубической интерполяции добавлены еще два варианта - бикубическое сглаживание (Bicubic Smoother), лучше всего сглаживающее зубцы при увеличении изображения, и бикубическое увеличение резкости (Bicubic Sharper), сохраняющее детали при выполнении субдискретизации для уменьшения изображения. Бикубическая интерполяция показана на рис. 3.7.

Интерполяция - это процесс, который можно применять во время сканирования, если вам действительно нужно получить более высокое разрешение, поскольку самые сложные алгоритмы дают изображения, содержащие полезную информацию, которой не было бы на неприкрашенных отсканированных изображениях. При этом процессе дополнительные пиксели могут рассчитываться с удивительной степенью точности, точно имитируя те результаты, которые вы могли бы получить при более высоком разрешении. Лучше всего интерполяция работает для изображений со множеством деталей.

Какая-то интерполяция происходит при любом сканировании с разрешением, отличным от естественного разрешения сканера. Например, если реальное разрешение вашего сканера составляет 4000 выборок на дюйм, то всякий раз, когда вы сканируете с разрешением, скажем, 2000 spi, желая уменьшить размер файла для не очень важных изображений, конечное изображение формируется в помощью интерполяции. Если же сканер с разрешающей способностью 4000 spi позволяет выполнять сканирование с разрешением 8000 spi, интерполяция запускается для имитации более высокого разрешения. В некоторых сканерах интерполяция выполняется аппаратно при создании отсканированного изображения, тогда как в других этот этап выполняется с помощью программного обеспечения на компьютере.

Изображение, оцифрованное на сканере, в процессе редактирования представляется на мониторе компьютера и обрабатывается в редакторе таким образом, чтобы получилась печатная версия высокого качества. Эта цепочка операций настолько привычна для большинства пользователей, что мало кто задумывается о тех непростых трансформациях, которые претерпевает оригинал на этом пути.

Экранная версия изображения - это просто матрица точек, которая описывается своими размерами по высоте и ширине. Изображение с размерами 600 на 400 будет занимать фиксированную долю экранного пространства на любом мониторе, независимо от его принципа действия. Оно закроет почти весь экран, если для него выбрано разрешение 640*480, на экране с разрешением 1024*768 оно займет примерно четверть пространства, наконец, при разрешении 1600*1200 будет занято чуть более одной девятой площади экрана. При этом физические размеры, т.е. размеры, которые рассчитываются в дюймах и сантиметрах, будут зависеть от диагонали монитора.

А каковы будут размеры картинки при выводе ее на печать? Для искушенного пользователя Photoshop ответ очевиден. Размеры печатной версии совпадают с габаритами сканированного оригинала (если быть предельно точным, то с размерами области сканирования). Это естественное соглашение для всех программ обработки графики является установкой по умолчанию; но большая часть растровых редакторов располагает специальными средствами изменения размеров печати.

Чтобы установить такой размер экранной версии изображения, который совпадает с его печатным вариантом, требуется выполнить команду главного меню View - Print Size (Просмотр - Размер при печати) редактора Photoshop или воспользоваться кнопкой панели с тем же названием.

Пусть требуется отпечатать изображение размером 600*600 пикселов. Эти размеры - данность, сейчас не имеет значения способ их получения разрешение сканирования и установки печати. Если задать размеры печатной версии в 10 дюймов, то разрешение будет равно 600 dot / 10 inch = 60 dpi . Приведем ряд значений разрешения для разных габаритов печатного оттиска:

  • 600dot / 5inch = 120dpi;
  • 600dot / 3inch = 200dpi;
  • 600dot / 2inch = 300dpi.

Все эти изменения совершенно не затрагивают экранную версию, все ее достоинства и недостатки заложены на этапе сканирования и изменения области печати не влияют на качество оцифрованного оригинала. А вот на качество печатной версии это влияет и существенно.

Для любого печатного оборудования есть некоторое оптимальное значение разрешения цифрового изображения, когда устройство печати будет способно передать максимальное число деталей оригинала. Качество результата зависит и от типа выбранной бумаги. Это влияние особенно сильно проявляется для наиболее популярных в наше время печатных устройств - цветных струйных принтеров.

Пусть, для выбранного принтера и сорта бумажного носителя оптимальным является значение разрешение, равное 200 dpi . Какие последствия вызовет вывод на печать выбранного оригинала с разрешением в 120 dpi ? Это решение приведет к потере качества, поскольку часть деталей будет потеряна при печати. А если побороться за результат, выбрав более высокое разрешение печати? Если, например, выставить 300 dpi или более, то принтеру будет передана избыточная информация, которой он просто не сможет воспользоваться.

Предположим, что сканированная версия изображения демонстрирует посредственное качество при выводе на монитор. Можно ли поправить дело, отпечатав ее на высококачественной бумаге с высоким разрешением? Фокус не получится, поскольку печать не добавляет новой информации к оригиналу, принтер использует только те данные, которые заложены в изображение на этапе оцифровки. Эти мысленные эксперименты, конечно, упрощают реальное положение дел, но действие принципа разумной достаточности для выбора оптимального разрешения печати вряд ли можно оспорить.

Итак, если зафиксировать точечные размеры изображения, то любые изменения разрешения влекут за собой модификацию области печати. Справедливо и обратное утверждение. В растровой графике это преобразование принято называть масштабированием.

Зачем масштабировать изображение? Причины для этого многообразны и часто очень весомы. Многие современные цифровые камеры среднего уровня продуцируют изображения небольшого размера, которые, будучи отпечатанными, занимают площадь почтовой марки. Настольные издательские системы требуют изображения фиксированных размеров, которые могут не совпадать с оригинальными габаритами и пр.

Масштабирование не меняет физические размеры графического файла, поскольку не воздействует ни на один из параметров (число точек, глубина цвета), от которых зависит его значение.

Дискретизация

Изменение числа точек изображения называется дискретизацией. Эта операция очевидным образом влияет на размеры экранной версии изображения, которая на мониторе с неизменными характеристиками становится больше или меньше, в зависимости от заданных значений.


Рис. 2.4.

Поясним эту операцию на примере изображения из стандартной коллекции редактора (рис. 2.4). Оригинальная версия картинки, которая занимает среднюю позицию, имеет разрешение в 72 dpi . Увеличение разрешения в два раза до 144 dpi влечет за собой возрастание количества точек и рост линейных размеров экранной версии изображения (правый образец). Уменьшение разрешения до 36 dpi продуцирует прямо противоположные последствия (левый образец).

В отличие от масштабирования дискретизация - это не элементарная с вычислительной точки зрения операция, поскольку она решительно вмешивается в структуру изображения.

Пусть имеется изображение размером 400*400 точек. Если сократить его экранные размеры до 300*300 , то, на первый взгляд, это означает незначительное вмешательство в оригинал - сокращение всего лишь на три четверти. Иная картина открывается если подсчитать количество точек до операции и после. Исходная картинка состояла из 400*400 = 160 000 точек, а после преобразования насчитывает 300*300 = 90000 точек - почти наполовину меньше. Понятно, что такая масштабная по своим последствиям операция не может не сказаться на качестве картинки.

Еще более сложные задачи приходится решать при увеличении количества точек. Если при их уменьшении программа просто отбрасывает лишние пикселы, то при увеличении матрицы дополнительные точки надо "придумать". Добавление новых пикселов выполняется по специальным алгоритмам интерполяции.

Уменьшение количества точек изображения - это сравнительно безопасная процедура, которая не оказывает прямого влияния на качество оригинала Увеличение точек сложнее по своим алгоритмам и последствиям Небольшое приращение растра не влечет за собой заметных отрицательных последствий. Масштабное преобразование такого рода почти всегда ухудшает резкость изображения, отчасти размывая образ.

В растровой графике получили распространение три основных метода дискретизации (все они поддерживаются редактором Photoshop ), которые различаются между собой скоростью работы и точностью результатов:

  • Nearest Neighbor (По соседним пикселам). Самый простой метод интерполяции, обладающий высокой скоростью работы и результатами не самого высокого качества. В качестве образца для нового пиксела берутся характеристики его ближайшего фактического соседа. Метод дает неплохие результаты для областей с регулярной геометрией, например прямых линий, прямоугольников и пр.;
  • Bilinear (Билинейная). Этот метод несколько сложнее в реализации, но дает лучшие результаты по сравнению с методом Nearest Neighbor . Параметры новой точки рассчитываются усреднением цветовых или тоновых характеристик соседних действительных пикселов изображения. Свои преимущества метод показывает при уменьшении количество точек изображения. Рациональной областью его применения является обработка изображений среднего качества;
  • Bicubic (Бикубическая). Это лучший метод интерполяции, по этой причине он принят по умолчанию в редакторе Photoshop . Новые точки рассчитываются по существующим соседям на основе несколько более сложных алгоритмов, чем в предыдущем методе;
  • Bicubic Smoother (Бикубическая со сглаживанием). Вариант метода бикубической интерполяции. Он предназначен для дискретизации изображений высокого качества при увеличении их размеров;
  • Bicubic Sharper (Бикубическая с настройкой резкости). Вариант метода бикубической интерполяции. Он предназначен для обработки качественных изображений при уменьшении их размеров.

Что происходит с разрешением и областью печати при выполнении процедуры дискретизации? Ответ дает определение понятия разрешение: Длина ( inch ) * Разрешение (dpi)= Количество точек .

Это соотношение показывает, что при любой дискретизации изображения должны меняться его фактическая длина или разрешение. С точки зрения математики обе возможности равноправны, важно только сохранить равенство правой и левой частей уравнения. При дискретизации изображения в Photoshop меняются размеры печати, при этом разрешение остается неизменным. Путем чуть более сложных манипуляций с числовыми полями того же диалогового окна можно компенсировать изменение числа точек при помощи новых значений разрешения.

Операцию дискретизации могут выполнять и устройства оцифровки. При обработке оригинала с разрешением, которое не является целой частью максимального оптического разрешения сканера осуществлена процедура во многом напоминающая билинейную интерполяцию, выполняемую растровыми редакторами при изменении числа точек изображения. Рассмотрим эту ситуацию более подробно. Пусть требуется оцифровать оригинал шириной в три дюйма на сканере с максимальным оптическим разрешением в 600 dpi . Простым умножением можно найти количество светочувствительных, которые будут задействованы в этой процедуре. Оно равно 600 * 3 = 1800 . Если установлено разрешение, равное половине максимального (300 dpi ), то в процессе оцифровки будет участвовать 900 датчиков, т.е. каждый второй. Работу в таком режиме можно организовать элементарными средствами, не внося глубокие изменения в алгоритмы управления прибором. Совсем иная ситуация возникает, если выбрать такую плотность оцифровки, которая не является целой частью максимального оптического разрешения. Это приведет к нарушению регулярности расположения активных датчиков, поэтому подлинный вид сканируемого оригинала может быть сформирован только с участием специальных корректирующих алгоритмов, работающих по принципу программной интерполяции.

Выбор разрешения сканирования часто обосновывается рациональными доводами, но, несмотря на веские физические аргументы и стройные логические рассуждения, у пользователя почти всегда остается значительная свобода выбора. Даже в мысленном эксперименте трудно представить себе такую ситуацию, когда невозможно отступить от рассчитанного разрешения сканирования. В большинстве случаев качество изображения не претерпевает критических изменений даже при значительных отклонениях разрешения от рассчитанных оптимальных значений. Поэтому следует выбирать такую плотность оцифровки, которая приближает расчетное значение сверху и одновременно является целой частью максимального оптического разрешения выбранного устройства сканирования. Иными словами, если сканер способен работать с разрешением в 300 dpi , то кратные числа 75, 100, 150 dpi предпочтительнее, чем установки сканирования, не являющиеся целой частью от 300, например 120 или 175 dpi . Если для некоторого оригинала при помощи расчета или иным путем получено оптимальное разрешение, равное 140 dpi , то в реальной сессии сканирования целесообразно установить 150 dpi .

Отметим еще раз принципиальные различия между масштабированием и дискретизацией. Первая операция влияет только на печатную версию изображения, она никоим образом не воздействует на актуальные пикселы, поэтому экранная версия картинки не претерпевает никаких изменений даже при значительных преобразованиях масштаба. Ее результаты можно заметить только при выводе документа на печать. Вторая операция более сложная по технике и более ответственная по своим результатам. Она выполняет глубокую перестройку изображения, при определенных условиях, воздействуя на каждый его пиксел.

В англоязычной литературе часто проводят тонкое терминологическое различие между увеличением и уменьшением количества точек. Первая операция называется upsampling, а вторая - downsampling, а сам родовой термин - resampling. В отечественной литературе можно встретить дословный, калькированный перевод этих операций на русский язык - апсамплинг, даунсамплинг и ресамплинг! Если с последним термином еще можно примириться, то первые два слова явно не согласуются со строем русской речи и их существование не диктуется технической необходимостью.

Масштабирование и дискретизация в Photoshop

Photoshop - это профессиональный растровый редактор, поэтому он полноценно поддерживает функции масштабирования и дискретизации. Все возможные операции этого типа выполняются средствами одного диалогового окна Image Size (Размер изображения). Для вывода его на экран достаточно выполнить команду Image - Image Size (рис. 2.5).


Рис. 2.5.

Рассмотрим основные возможности этого окна:

  • Pixel Dimensions (Размерность). В этом разделе выводятся размеры изображения, заданные в пикселах или процентах, и общий размер текущего документа в килобайтах или мегабайтах. Поля этого раздела доступны, если опция Resample Image (Интерполяция) является активной. В противном случае программа запрещает прямое изменение этих величин;
  • Document Size (Размер печатного оттиска). В этой секции выводится сведения о фактических габаритах печатного оттиска и разрешении, при котором изображение получает текущие размеры. Эти поля допускают прямое изменение. Увеличение размеров печатного оттиска влечет за собой возрастание числа пикселов цифровой версии изображения и наоборот;
  • Constrain Proportion (Сохранить пропорции). Данная опция управляет сохранением пропорций документа. Если она включена, то при любых операциях с изображением будет сохранено исходное соотношение сторон. Если опция не выбрана, то размеры сторон разрешается менять независимо друг от друга.
  • Resample Image (Интерполяция). Эта опция управляет процессом дискретизации. Если она включена, то программа разрешает менять точечные размеры оригинала, а следовательно и общее количество пикселов, по выбору пользователя. В противном случае все поля раздела Pixel Dimension становятся недоступными, и управление габаритами осуществляется только посредством настройки печатных размером или разрешения.
  • Изменение размеров растра выполняется при помощи алгоритмов интерполяции. Для выбора метода интерполяции служит безымянный список, расположенный рядом с переключателем. В нем можно выбрать один из пяти доступных методов пересчета изображения Nearest Neighbor (По соседним пикселам), Bilinear (Билинейная) и три варианта метода Bicubuc (Бикубическая). Особенности этих алгоритмов дискретизации обсуждались в предыдущем разделе.

Если манипуляции с установками диалогового окна Image Size оказались неудачными, то можно их сбросить и вернуться к стартовым значениям параметров. Для этого надо нажать и удерживать клавишу Alt, в результате кнопка Cancel превратиться в Reset, которая служит для отказа от сделанных окне изменений. Этот стандартный для редактора прием используется во многих диалогах программы.

Какие причины заставляют прибегать к масштабированию? Невозможно упомянуть обо всех ситуациях, когда это прием оказывается необходимым. Приведем лишь один пример. Многие цифровые камеры продуцируют оригиналы низкого разрешения и значительных размеров. Пусть получено изображение с разрешением 72 dpi и с размерами 30 на 20 сантиметров. Если отправить его на печать в таком состоянии, то качество оттиска будет невысоким. Можно с уверенностью прогнозировать появление неровностей на краях линий и отчетливо различимые ступеньки на областях с плавными цветовыми переходами. Количество точек в оригинале достаточно велико (почти полмиллиона) для того, чтобы получить печатную версию высокого качества. Требуется просто уменьшить размеры печатной версии. Для этого надо отключить опцию Resample Image и в полях раздела Document Size ввести разумные размеры печати, например 10 сантиметров по ширине. Программа пересчитает все остальные доступные параметры. Высота при этом будет равняться 6,5 см, а разрешение станет равным 215. Эти значения гарантируют печать достаточно высокого качества.

Ключевые термины

Бикубическая интерполяция - метод интерполяции, в котором новые точки растрового изображения создаются по цветовым и яркостным значениям нескольких соседних пикселов. Этот метод интерполяции основан на более сложном алгоритме расчета, чем метод ближайшего соседа, поэтому он требует больших вычислительных ресурсов, но дает более качественные результаты.

Глубинацвета - общее количество двоичных разрядов, приходящихся на один пиксел растрового изображения. Пусть некоторое изображение записано в системе RGB , и на каждую хроматическую координату R, G, и B отводится по 8 двоичных разрядов (1 байт). Можно утверждать, что это изображение имеет глубину цвета 8 бит на канал или 3 * 8 = 24 бита на пиксел.

Дискретизация - изменение числа точек растрового изображения.

Интерполированное разрешение - характеристика устройств оцифровки, у которых точки цифрового изображения получаются комбинацией физического считывания и программной интерполяции.

Интерполяция растрового изображения - процедура расчета и добавления новых точек в растровое изображение.

Масштабирование растрового изображения - изменение разрешения изображения при выводе его на различные носители, при условии сохранения точечных размеров оригинала.

Метод ближайшего соседа - метод интерполяции, который порождает новые точки растрового изображения, заимствуя цветовые и яркостные характеристики от ближайшей соседней точки. Самый быстрый и грубый метод интерполяции.

Механическое разрешение - характеристика планшетных сканеров, равная вертикальной плотности выборки. Этот параметр, как правило, равняется минимальному смещению каретки планшетного сканера, поэтому называется вертикальным разрешением.

Оптическое разрешение - характеристика планшетных сканеров, равная плотности фоторецепторов. Иногда этот параметр называют горизонтальным разрешением.

Оцифровка - процедура перевода изображения в растровую электронную форму.

Разрешение изображения - характеристика растрового изображения, задающая плотность точек (пикселов) на единицу длины. Измеряется обычно в точках на дюйм (dot per inch , dpi ) или пикселах а дюйм (pixel per inch , ppi ).

Разрешение цифрового фотоаппарата - общее количество рецепторов фоточувствительной матрицы, например 8 мегапикселов = 8 млн. пикселов.

Разрешение экрана - два числа, равные максимальному количеству независимых адресуемых точек по ширине и высоте, например 800*600, 1024*768 .

Цветовое пространство True Color - цветовое пространство системы RGB с глубиной цвета 24 бита на точку. Множество цветов этого пространства составляет 16 777 216. Этой палитры достаточно для представления и обработки большей части цифровых изображений в электронном издательстве и полиграфии.

Установка свойств отображения

В приложении Image Processing Toolbox существует возможность настройки установок, которые контролируют некоторые свойства функций отображения изображений imshow и imtool. Например, использование установок приложения позволяет описать коэффициент увеличения, который применяется при выводе изображений с помощью функций imtool и imshow.

В рамках данного вопроса рассмотрим

  • Список установок, которые поддерживаются приложением.
  • Описание процесса получения текущих значений установок с использованием функции iptgetpref.
  • Описание процесса установки текущих значений установок с использованием функции iptsetpref.

Установки приложения

Приложение Image Processing Toolbox поддерживает несколько установок, которые влияют на способ отображения изображений с помощью функций imshow и imtool. В таблице приведен список установок и их короткое описание. Для получения более детальной информации относительно установок приложения и их значений см. описание функции iptsetpref.

Установки приложения Описание
ImshowBorder Этот параметр может принимать два значения - "loose" и "tight". Если параметр ImshowBorder принимает значение "loose", то изображение будет отображаться функцией imshow с отступом от края окна figure. Таким образом, в окне остается место для дополнительных надписей. Используется по умолчанию. Если параметр ImshowBorder принимает значение "tight", то изображение будет отображаться функцией imshow так, чтобы оно занимало все окно figure.
ImshowAxesVisible Этот параметр может принимать два значения - "on" и "off". Если параметр ImshowAxesVisible принимает значение "on", то при выводе изображения функцией imshow в окне figure будут дополнительно выведены оси координат. Если же параметр ImshowAxesVisible принимает значение "off", то оси координат выводиться не будут. Значение параметра "off" устанавливается по умолчанию.
ImshowInitialMagnification Управляет коэффициентом увеличения, который используется функцией imshow при выводе изображения.
ImtoolInitialMagnification Контролирует коэффициент увеличения в приложении Image Tool, которое используется для масштабирования изображений.

Получение значений установок приложения

Для определения текущих значений используется функция iptgetpref. Рассмотрим пример использования функции iptgetpref для определения значения свойства imtoolInitialMagnification.

Iptgetpref("ImtoolInitialMagnification") ans = 100

Для более детальной информации см. описание функции iptgetpref.

Установка значений свойств приложения

Для установки значений свойств приложения используется функция iptsetpref. Рассмотрим пример использования функции iptsetpref для установки свойств отображения, которые приводят к тому, что при вызове функции imshow будет изменятся размер окна отображения в соответствии с размерами отображаемого изображения и значением свойства "ImshowBorder".

Iptsetpref("ImshowBorder", "tight");

Для более детальной информации см. описание функции iptsetpref.

Пространственные преобразования

Рассмотрим основные функции пространственных преобразований, которые реализованы в приложении Image Processing Toolbox.

Терминология Описание основных терминов, которые используются при обработке изображений
Интерполяция Пространственный (или временной) прогноз значений неизвестных значений пикселей между истинными значениями пикселей.
Изменение размеров изображения с помощью функции imresize.
Вращение изображений Использование функции imrotate для поворота изображений.
Вырезание изображения Использование функции imcrop для вырезания прямоугольной части изображения.
Описание основных свойств пространственных преобразований в приложении.

Интерполяция

Как уже отмечалось выше, интерполяция - это пространственный (или временной) прогноз значений неизвестных значений пикселей между истинными значениями пикселей. Например, для изменения размеров изображений используется один из методов интерполяции. Методы двумерной интерполяции используются также при повороте изображений (функция imrotate) и при анализе изображений с помощью функции improfile.

Методы интерполяции

Приложение Image Processing Toolbox использует три встроенных алгоритма интерполяции:

  • Интерполяция по ближайшему соседу - используется значение ближайшего пикселя.
  • Билинейная интерполяция - используется интерполяция по билинейной поверхности.
  • Бикубическая интерполяция - используется интерполяция по бикубической поверхности.

Типы изображений

В функциях, которые используют интерполяцию, в качестве аргумента указывается название метода интерполяции. Для большинства функций это интерполяция с использованием значений ближайших пикселей. Этот метод дает приемлемые результаты для всех типов изображений и является единственным методом, который используется для индексных изображений. Для яркостных и RGB изображений лучше использовать билинейную или бикубическую интерполяцию, поскольку, в большинстве случаев, эти методы обеспечивают лучший результат, чем при использовании интерполяции с использованием значения ближайших пикселей.

Для RGB изображений интерполяция выполняется отдельно для красной, зеленой и синей составляющих. В принципе, это не совсем корректно, поскольку приводит к нарушению цветового баланса.

Для бинарных изображений интерполяция даст эффект, если проводить ее осознанно. При использовании билинейной или бикубической интерполяции вычисленные значения пикселей на результирующем изображении не всегда будут равны 0 или 1. Результат обработки также зависит от формата исходного изображения:

  • Если данные исходного изображения представлены в формате double, то результирующее изображение будет полутоновым и представленным в формате double. Таким образом, результирующее изображение не будет бинарным, поскольку содержит значения из диапазона между 0 и 1.
  • Если исходное изображение представлено в формате uint8, то результирующее изображение будет бинарным и представленным в формате uint8. Значения интерполирующих пикселей будут округлены к 0 и 1, а результирующее изображение будет представлено в формате uint8.

При использовании интерполяции с использованием значений ближайших пикселей результат будет всегда бинарным, так как значения интерполируемых пикселей берутся из исходного изображения.

Изменение размеров изображения

Для изменения размеров изображения используется функция imresize. При использовании функции imresize необходимо

При использовании функции imresize размер результирующего изображения можно указать двумя путями:

  • через описание коэффициента увеличения.
  • через описание размеров результирующего изображения.

Использование коэффициента увеличения

Для увеличения изображения необходимо, чтобы коэффициент увеличения был больше 1. Для уменьшения изображения необходимо, чтобы коэффициент увеличения находился в диапазоне между 0 и 1. Например, с помощью команды, которая написана ниже, реализуется увеличение изображения I в 1.25 раз.

I = imread("circuit.tif"); J = imresize(I,1.25); imshow(I) figure, imshow(J)

Описание размера результирующего изображения

Существует возможность описать размер результирующего изображения в виде вектора, который содержит два числа - количество строк и столбцов результирующего изображения. Рассмотрим пример создания результирующего изображения Y, которое состоит из 100 строк и 150 столбцов.

Y = imresize(X,)

Примечание. Если при описании размеров результирующего изображения не сохранены пропорции соотношения сторон исходного изображения, то результирующее изображение будет искажено.

Описание метода интерполяции

По умолчанию функция imresize для формирования результирующего изображения использует метод интерполяции на основе значений ближайших пикселей. Однако можно задать также другой метод интерполяции. В таблице приведен список опций, которыми задаются методы интерполяции в функции imresize.

Рассмотрим пример, когда функция imresize использует билинейную интерполяцию.

Y = imresize(X,,"bilinear")

Использование фильтров препарирования изображений

Изменение размеров изображения может привести к возникновению артефактов на изображении, что отражается на его качестве.

Поэтому при уменьшении изображений с использованием билинейной или бикубической интерполяции, функция imresize автоматически использует низкочастотный фильтр для уменьшения артефактов на результирующем изображении.

Функция imresize может не применять низкочастотный фильтр, если используется интерполяция по соседним элементам. Интерполяция по соседним элементам используется, в основном, для индексных изображений, а низкочастотная фильтрация для индексных изображений не применяется.

Также можно создать свой фильтр для проведения низкочастотной фильтрации. Для более детальной информации см. описание функции imresize.

Поворот изображений

Для поворота изображений используется функция imrotate. При использовании функции imrotate нужно указать два основных аргумента:

  1. изображение, которое нужно повернуть;
  2. угол поворота.

Угол поворота можно описать в градусах. Если задать положительное значение, то функция imrotate будет вращать изображение против часовой стрелки, если задать отрицательное значение, то функция imrotate буде вращать изображение по часовой стрелке. Рассмотрим пример поворота изображения I на 35 градусов против часовой стрелки.

J = imrotate(I,35);

В качестве необязательных аргументов в функции imrotate также можно описать

  1. метод интерполяции;
  2. размер результирующего изображения.

Описание метода интерполяции

По умолчанию, функция imrotate использует интерполяцию по соседним элементам для определения значений пикселей результирующего изображения. Также пользователь может использовать другой метод интерполяции. В таблице подан список поддерживаемых интерполяционных методов.

Рассмотрим пример поворота изображения на 35° против часовой стрелки с использованием билинейной интерполяции.

I = imread("circuit.tif"); J = imrotate(I,35,"bilinear"); imshow(I) figure, imshow(J)

Описание размера результирующего изображения

По умолчанию, функция imrotate создает результирующее больше, так чтобы поместить исходное изображение, которое размещено под указанным углом. Пикселям, которые находятся за пределами изображения, устанавливается значение 0 и они являются фоном результирующего изображения. Если в функции imrotate в качестве аргумента указать опцию "crop", то результирующее изображение будет обрезано до размеров исходного изображения. Для более детальной информации см. описание функции imrotate.

Вырезание изображений

Для выделения прямоугольной части изображения используется функция imcrop. При использовании функции imcrop необходимо указать два основных аргумента:

  1. исходное изображение;
  2. координаты прямоугольника, которым определяется площадь вырезания.

Существует также другой путь использования функции imcrop. Он заключается в том, что не всегда нужно указывать прямоугольник, который вырезается на изображении. Этот прямоугольник можно задать интерактивно. В этом случае курсор изменяет свой вид и принимает форму крестика. Нажатие на левую клавишу мыши свидетельствует о выборе одного угла прямоугольника, а место курсора в момент отпуска клавиши мыши свидетельствует о выборе другого угла. Таким образом поверх изображения будет наложен прямоугольник, который определяет вырезаемую часть изображения.

Imshow circuit.tif I = imcrop; imshow(I);

Выполнение основных пространственных преобразований

Для выполнения основных двумерных пространственных преобразований используется функция imtransform.

При использовании функции imtransform необходимо указать два основных аргумента:

  • исходное изображение;
  • структуру пространственных преобразований (TFORM), которая определяет тип нужных преобразований.

Описание типа преобразований

При описании типа преобразований необходимо использовать структуру TFORM. Существует два пути использования TFORM:

  • использование функции maketform;
  • использование функции cp2tform.

Использование maketform

При использовании функции maketform необходимо описать тип нужных преобразований. В таблице приведен список типов преобразований в алфавитном порядке, который поддерживается функцией maketform.

Тип преобразования Описание
"affine" Преобразования, которые включают сдвиг, поворот, масштабирование и другие похожие функции преобразования изображений. При этом прямые линии остаются прямыми, параллельные остаются параллельными, а прямоугольник может превратиться в параллелограмм.
"box" Отдельный случай аффинных преобразований, когда каждая размерность масштабируется независимо.
"composite" Структура двух или более преобразований.
"custom" Преобразование, которое определено пользователем и вызывается с помощью функции imtransform.
"projective" При этом типе преобразований прямые линии остаются прямыми, а параллельные сходятся в одной точке. Эта точка может находиться как в пределах изображения, так и за его пределами.

Использование cp2tform

При использовании функции cp2tform создается TFORM, когда необходимо выполнять такие преобразования, как подгонка данных, например, при полиномиальных преобразованиях.

Примечание. При использовании функции imtransform структура TFORM выполняет двумерные пространственные преобразования. Если изображение содержит больше, чем две размерности, например, RGB изображения, то двумерные преобразования автоматически применяются ко всем двумерным составляющим. Для определения n-мерных преобразований используется функция tformarray.

Выполнение преобразований

После определения типа преобразований в структуре TFORM, существует возможность их выполнения путем вызова функции imtransform.

Рассмотрим пример использования функции imtransform для выполнения проективных преобразований с изображением шахматной доски.

I = checkerboard(20,1,1); figure; imshow(I) T = maketform("projective",,... ); R = makeresampler("cubic","circular"); K = imtransform(I,T,R,"Size",,"XYScale",1); figure, imshow(K)

Различные опции функции imtransform контролируют разные аспекты преобразований. Например, как видно из предыдущего преобразования, отдельные установки должны контролировать количество и размещение копий исходного изображения на результирующем изображении. Также контролируется размер результирующего изображения. В приложении Image Processing Toolbox есть достаточно много примеров с использованием функции imtransform и других похожих функций, которые выполняют различные типы пространственных преобразований.

Линейная фильтрация и проектирование фильтров

Приложение Image Processing Toolbox содержит некоторое число функций, которые проектируют и реализуют двумерную линейную фильтрацию данных изображения. Рассмотри эти вопросы в таком порядке:

Рассмотрим еще некоторые термины, которые также буду в дальнейшем применяться при рассмотрении материала.

Термин Описание
Convolution (свертка) Операция над локальной окрестностью, где каждый результирующий пиксель представляет собой взвешенную сумму исходных пикселей. Вес определяется ядром свертки. С помощью операции свертки можно реализовать такие методы обработки изображений как сглаживание, повышение резкости и усиление границ объектов изображения.
convolution kernel (ядро свертки) Матрица весов, которая используется при выполнении свертки.
Correlation (корреляция) Операция над локальной окрестностью, где каждый результирующий пиксель представляет собой взвешенную сумму пикселей локальной окрестности. Весы определяются ядром корреляции. Понятие корреляции очень тесно связано с понятием свертки.
correlation kernel (ядро корреляции) Для реализации функции корреляции используется весовая функция. Ядра корреляции можно получить с помощью функции проектирования фильтров в Image Processing Toolbox. Ядра корреляции представляют собой ядро свертки, которое повернуто на 180 градусов.
FIR filter (фильтр с конечной импульсной характеристикой, КИХ-фильтр) В приложении существует ряд функций для расчета коэффициентов цифрового КИХ фильтра, в частности, методом Ремеза. Особенностью их использования является то, что исходные данные задаются в виде желаемой АЧХ произвольной сложности.
frequency response (частотная характеристика или частотный отклик) Математическая функция, с помощью которой можно оценивать работу фильтра на различных частотах.
neighborhood operation (операция с использованием значений соседних элементов) Операция, в результате которой значение каждого пикселя вычисляется на основе значений окрестных пикселей. Свертка, методы морфологической обработки и медианная фильтрация являются примерами операций с использованием соседних пикселей.
window method (локальные методы обработки) Методы обработки, при которых учитываются локальные особенности изображения.

Линейная фильтрация

Фильтрация представляет собой технологию модификации или улучшения изображения. Например, существует большое количество фильтров для усиления некоторых особенностей изображения или их удаления. Речь может идти о подчеркивании границ, выделении областей по некоторым признакам (например, цветовым) и т.п.

Как уже отмечалось ранее, существует ряд методов, в которых значения пикселей обработанного изображения вычисляются на основании значений окрестных пикселей. Разница между этими методами состоит в том, каким образом учитываются значения соседних пикселей. Отметим, что на основании значений соседних пикселей можно говорить об особенностях локальных окрестностей изображения.

Линейная фильтрация представляет собой такой вид обработки, при которой значения пикселей обработанного изображения формируются в результате линейных операций над значениями пикселей окрестности исходного изображения.

Поскольку этот вид фильтрации довольно часто применяется при обработке изображений, рассмотрим некоторые вопросы линейной фильтрации более детально, в частности

  • Фильтрация с использованием convolution и correlation.
  • Выполнение фильтрации с использованием функции imfilter и др.

Свертка

Линейная фильтрация изображений может быть реализована с помощью так называемой операции свертки. При реализации этой операции значения результирующих пикселей вычисляются как взвешенная сумма пикселей исходного изображения. Матрица весов называется ядром свертки, она известна еще как фильтр.

Рассмотрим пример. Пусть изображение представляет собой набор пикселей со значениями, представленными в виде матрицы

A =

а ядро свертки представлено таким образом

H =

Рассмотрим пример вычисления результирующего пикселя с координатами (2,4). Для этого необходимо выполнить следующие шаги:

  1. Развернуть ядро свертки на 180 градусов относительно центрального элемента.
  2. Умножить каждое значение веса в матрице свертки на соответствующее значение пикселя в матрице A.
  3. Просуммировать результат умножения.


Корреляция

Операция корреляции очень похожа на операцию свертки в плане реализации. При вычислении корреляции значение результирующего пикселя представляет собой взвешенную сумму окрестных пикселей. Разница состоит в том, что матрица весов перед вычислениями не поворачивается. Рассмотрим аналогичный пример вычисления значения результирующего пикселя (2,4). Исходная матрица изображения и ядро корреляции взяты из предыдущего примера. Для этого необходимо реализовать следующие шаги:

  1. Перемножаем каждое значение веса и на соответствующее значение элемента матрицы исходного изображения.
  2. Суммируем все результаты умножения, которые получены в п.1.

В результате значение пикселя (2,4) будет равно


Вычисление значения результирующего пикселя (2,4)