Лабораторная работа "Моделирование смазанных изображений" Цели работы 1. Получение основных навыков работы с системой MATLAB. 2. Разработка программы для моделирования смаза. Выполняемые задачи 1. 2. 3. 4. 5. Построить исходное изображение согласно заданию Отобразить исходное изображение на экране Построить смазанное изображение с заданной величиной смаза Добавить в смазанное изображение шум с заданным уровнем Отобразить смазанное изображение с шумом на экране Выполнение работы Задание основных параметров Параметры программы: a. Размер стороны изображения (пикселей) b. Величина смещения t (пикселей) c. Уровень шума в изображении (относительных единиц) Используемые операторы/функции/команды - функция очистки рабочей области clear - функция очистки командной области clc - оператор присваивания = - символ комментария % Построение исходного изображения Вычисление сетки координат – функция [<arrx>,<arry>] = meshgrid(<rangex>, <rangey>) <arrx>, <arry> - имена переменных, которые будут содержать значения координат сетки X и Y соответсвенно (двухмерные массивы) <rangex>, <rangey> - диапазоны значений координат отдельно по осям X и Y (одномерные массивы) Для генерации <rangex> и <rangey> можно использовать оператор диапазона :. Тогда если считать, что координаты точек изображения начинаются с 1, то <rangex> = 1:<size> и <rangey> = 1:<size>, <size> - размер стороны изображения. 2. Построение изображения Изображение строится согласно заданию при помощи сравнительных(«больше» – >, «меньше» – < и.т.п.), логических («и» – &, «или» – | и.т.п.) и поэлементных арифметических операторов («поэлементное умножение» – .*, возведение в степень – .^ и.т.п.) Нужно иметь в виду, что арифметические операторы имеют приоритет перед операторами сравнения, а те, в свою очередь, более приоритетны, чем логические Если полученное изображение является массивом логических, а не числовых, значений, то для преобразования из логического типа в числовой достаточно умножить результирующий массив на единицу. Отображение изображения Можно использовать последовательность функций 1. surf(<image>,'EdgeColor','none');view(2);axis tight;colormap(gray);set(gcf,'Renderer','zbuffer') либо функцию imshow (нужен установленный image processing toolbox) imshow(<image>,[min(min(<image>)) max(max(<image>))],'InitialMagnification','fit'); <image> - переменная, содержащая изображение (двухмерный массив). Переменная должна быть действительной; для комплексных переменных можно использовать функции abs(<image>), real(<image>) или другие в зависимости от условий. Для того, чтобы различные изображения выводились в разных окнах, и их можно было наблюдать одновременно, перед отображением изображения нужно выбрать соответствующее окно при помощи функции figure(<N>), где <N> - номер окна. Построение смазанного изображения Будем считать, что движение, вызывающее смаз, происходит равномерно прямолинейно вдоль горизонтальной оси. Одним из способов моделирования смаза является многократное наложение сдвинутого вдоль горизонтальной оси исходного изображения. Это может быть достигнуто с использованием цикла for: <blurred_image>=zeros(<size>,<size>); for i=1:<blur_size> %i - переменная цикла si(:,i:<size>)=<image>(:,1:<size>-i+1); %si - сдвинутое на i-1 исходное изображение <blurred_image>=<blurred_image>+si; %наложение сдвинутых изображений end <blurred_image> - имя переменной для хранения смазанного изображения (двумерный массив) <size> - размер изображения <blur_size> - величина сдвига <image> - имя переменной, хранящей оригинальное изображение Добавление шума в изображение Будем считать, что шум является аддитивным гауссовским. Для генерации шума можно использовать функцию randn(<size>, <size>), возвращающую массив размера <size>x<size> значений шума с нулевым средним и среднеквадратичным отклонением, равным единице. Уровнем шума будем называть отношение мощности сигнала к мощности шума. Следовательно, среднеквадратичное отклонение добавляемого шума n должно вычисляться как n s kn , где s – среднеквадратичное отклонение сигнала, kn – коэффициент шума. Среднеквадратичное отклонение в MATLAB для сигнала, представленного матрицей <data>, может быть вычислено при помощи функции std2(<data>). Отобразить искаженное изображение можно как описано выше.