Трансформация изображения (1)

MATLAB
  1. Принцип параметрического геометрического преобразования изображений

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

  1. Прямое преобразование изображения и обратное преобразование изображения

Суть преобразования изображения заключается в сопоставлении координат точек пикселя с другими позициями через определенную функциональную связь. Если предположить, что изображение до преобразования равно I(x,y), а изображение после преобразования равно I'(x',y'), между изображениями до и после преобразования (x'y')=(f( x,y) g(x,y))I(x,y)=I'(x',y')=I'(f(x,y),g(x,y)) (1) (xy )=(f−1(x′,y′)g−1(x′,y′))I′(x′,y′)=I(x,y)=I(f−1(x′, y′), g−1(x′,y′)) (2) Формула (1) Нам известно преобразование координат (f(x,y),g(x,y)) от исходного изображения к целевому изображению , поэтому мы можем знать исходное изображение. Положение точки изображения в целевом изображении после преобразования мы называем это прямым отображением. Наоборот, в формуле (2) известно положение точки (x', y') целевого изображения на исходном изображении до преобразования (f−1(x', y'), g−1( x', y')), которое мы называем обратным отображением. После того как целочисленные координаты точек на входном изображении сопоставляются с выходным изображением, они становятся нецелочисленными координатами точек. Следовательно, будет много пикселей входного изображения, отображаемых вокруг значения пикселя целочисленной точки, и каждому значению пикселя нецелой точки вокруг него будет присвоено определенное значение серого, и эти назначенные значения пикселей будут наложены на вывод.Значения пикселей в целочисленных позициях точек на изображении. Из-за этой распределенной, наложенной природы прямое отображение иногда называют отображением передачи пикселя. Для прямого отображения значение пикселя определенной точки выходного изображения нельзя получить напрямую, необходимо пройти по всем значениям пикселей входного изображения, выполнить по ним преобразование координат и присвоить значения пикселей целочисленные позиции для получения значения пикселя каждого пикселя выходного изображения. Это недостаток прямого отображения.

image.pngМетод обратного отображения более интуитивен. В этом случае мы знаем положения целочисленных точек на выходном изображении. (x', y') — это позиция (x, y) на входном изображении до преобразования. Вообще говоря, это позиция нецелочисленной точки, а значение пикселя входного изображения в окружающей целочисленной точке равно используется для интерполяции для получения значения пикселя точки. Мы проходим по выходному изображению, и после двух шагов преобразования координат и интерполяции мы можем вычислять его значения пикселей одно за другим, поэтому обратное отображение также называется отображением заполнения изображения. Как показано ниже.

image.png

  1. Принцип понижения разрешения изображения и принцип интерполяции изображения

Существуют две основные цели уменьшения масштаба изображения (или субдискретизации или субдискретизации): 1. Подгонка изображения под размер области отображения 2. Создание эскиза соответствующего изображения. Основная цель масштабирования изображения (или повышения дискретизации или интерполяции) состоит в том, чтобы увеличить исходное изображение, чтобы его можно было отобразить на устройстве отображения с более высоким разрешением. Операция масштабирования изображения не может принести больше информации об изображении, поэтому качество изображения неизбежно пострадает. Однако существуют некоторые методы масштабирования, которые могут увеличить информативность изображения, так что качество масштабированного изображения превысит качество исходного изображения. Принцип понижения разрешения: для изображения I размер MN, уменьшите его в s раз, чтобы получить (M/s)(N/s) размер разрешения изображения, естественно, s должен быть общим делителем M и N. Если рассматривать изображение в матричном виде, то изображение в окне исходного изображения s*s превращается в пиксель, Значение этой точки пикселя представляет собой среднее значение всех пикселей в окне: Принцип повышения дискретизации: при увеличении изображения почти всегда используется метод интерполяции, то есть на основе исходных пикселей изображения используется подходящий алгоритм интерполяции для вставки новых элементов. между пикселями.

  1. Завершите эксперимент геометрического преобразования изображений

Изображение состоит из пикселей, а набор пикселей эквивалентен двумерной матрице, каждый пиксель имеет «позицию», то есть пиксель имеет координату. Предполагая, что координаты положения исходного пикселя равны (x0, y0), после перевода (△x, △y) координаты становятся (x1, y1), что можно выразить как: x1 = x0 + △x, y1 = y0 + △y, выраженный в виде матрицы:

image.png

im = imread('D:/cvpr/作业1/实验一/test.jpeg');%读入一幅图
[H,W,Z] = size(im); % 获取图像大小
I=im2double(im);%将图像类型转换成双精度
res = zeros(H,W,Z); % 构造结果矩阵。每个像素点默认初始化为1(白色)
delX = 50; % 平移量X
delY = 100; % 平移量Y
tras = [1 0 delX; 0 1 delY; 0 0 1]; % 平移的变换矩阵
for x0 = 1 : H
    for y0 = 1 : W
        temp = [x0; y0; 1];%将每一点的位置进行缓存
        temp = round(tras * temp); % 根据算法进行,矩阵乘法:转换矩阵乘以原像素位置
        x1 = temp(1, 1);%新的像素x1位置,也就是新的行位置
        y1 = temp(2, 1);%新的像素y1位置,也就是新的列位置
        % 变换后的位置判断是否越界
        if (x1 <= H) & (y1 <= W) & (x1 >= 1) & (y1 >= 1)%新的行位置要小于新的列位置
            res(x1,y1,:)= I(x0,y0,:);%进行图像平移,颜色赋值
        end
    end
end
set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
figure;%打开一个窗口,用来显示(多幅)图像
subplot(1,2,1), imshow(I),axis on ;%显示图片,一行两列,第一幅
subplot(1,2,2), imshow(res),axis on;%显示图片,一行两列,第二幅

image.png