Сделать результат Фурье инвариантным к вращению, масштабу, переводу
Я хотел бы знать, какие значения в матрице Фурье отвечают за изменение размера, поворота, перемещения и т. Д. Изображения.
Я кодировал двумерную функцию DFT, которая выводит матрицу dft комплексных чисел.
Как я могу удалить значения, отвечающие за масштабирование, перевод и поворот изображения, например, когда у меня есть 2 изображения, например:
Изображение1
Изображение 2 = Изображение 1 повернуто на 90 градусов
как только мы сравним матрицу DFT обоих изображений, мы обнаружим, что они равны.
вот код функции DFT, которая у меня есть:
%----------------------------------------------------------------
function [Xk] = dft1(xn)
N=length(xn);
n = 0:1:N-1; % row vector for n
k = 0:1:N-1; % row vecor for k
WN = exp(-1j*2*pi/N); % Twiddle factor (w)
nk = n'*k; % creates a N by N matrix of nk values
WNnk = WN .^ nk; % DFT matrix
Xk = (WNnk*xn );
%----------------------------------------------------------------
%----------------------------------------------------------------
function out=dft2(x)
y=zeros(size(x));
y1=y;
C=size(x,2); %number of columns
for c=1:C
y(:,c)=dft1(x(:,c));
end
R=size(x,1); %number of rows
for r=1:R
y1(r,:)=dft1(y(r,:).');
end
out=y1;
%----------------------------------------------------------------
2 ответа
Предполагая, что ваше изображение бесконечно (потому что мы не хотим, чтобы граничные эффекты омрачали здесь теорию).
Изменение размера / масштаба изображения приводит к соответствующему масштабу в области Фурье, масштабируя изображение с коэффициентом s
масштабирует частотную область 1/s
, Для конечных изображений это означает, что если вы масштабируете 2
Вы теряете верхнюю половину частотной области - это высокие частоты и детали изображения.
Поворот изображения соответствует аналогичному повороту в частотной области.
Перевод изображения означает изменение фазы коэффициентов Фурье: перевод x
пиксели приводят к фактору exp( -j pi x )
в частотной области (до некоторого постоянного масштабирования).
Хорошее резюме этих свойств преобразования Фурье можно найти здесь.
Теперь, хотя теория предлагает хорошие и ясные условия, в которых ДПФ двух сигналов можно согласовать, несмотря на то, что на практике масштабирование / вращение / перевод не всегда так просто.
Рассмотрим, например, случай трансляции: свойства преобразования Фурье предполагают, что два сигнала, которые отличаются только трансляцией, их ДПФ отличаются только модуляцией, таким образом, в идеальном случае деление ДПФ на два сигнала даст только компонент модуляции и выявит не только то, что сигналы идентичны по трансляции, но также и по величине трансляции между двумя сигналами.
Однако на практике это не так. Для конечных сигналов перевод одного сигнала вызывает граничный эффект: некоторые пиксели теряются (переводятся "за пределы" видимого сигнала), в то время как вводятся некоторые новые пиксели. Поскольку ДПФ является глобальным (то есть на каждое значение преобразованного сигнала влияют все значения исходного сигнала), эти граничные эффекты приводят к тому, что все значения преобразованных преобразованных сигналов будут различаться не только желаемой модуляцией, но и совершенно другими, делая соотношение между двумя сигналами совершенно произвольно.
То же самое касается масштабирования и вращения.
Возьмите величину вашего ДПФ, преобразуйте его в лог-полярные координаты, возьмите БПФ этого, затем возьмите величину. Это даст вам перевод, вращение и масштабную инвариантность, но не даст вам робастности по отношению к другим преобразованиям.