使用频域的图像处理 - 复制图像

时间:2016-01-23 21:36:23

标签: matlab image-processing transform fft

我的图像由2个相同的图像组成,其中一个是翻译过的。

input

现在,我想解决它。我使用了transform fourier的翻译属性:

$ f(x-x_0,y-y_0)\ leftrightarrowF(u,v)e ^ { - 2 {\ pi} i(ux_0 / {N} + vy_0 / M)} $

我测量了两幅图像之间的距离:x距离是24像素,y距离是4像素。在代码中:x_d和y_d。

然后我只是将频域图像中的所有像素除以公式+ 1中的指数表达式(1来自未翻译的图像)。

我无法弄清楚问题是什么......

这是我的代码:

elif 10 < score < 20:

结果如下:
result

任何帮助将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:0)

  • 在分割数组的定义中交换了x和y
  • 删除了fftshift
  • 在计数器指数的论证中加了-1
  • 为结果绘图添加了BW限制

    %UNTITLED Summary of this function goes here
    %   Detailed explanation goes here
    FileName='/tmp/me4iX.jpg';
    %--- Read Image ---
    im = imread(FileName);
    im=im(:,:,1)
    
    %--- apply FFT on the given image ---
    fftIm = (fft2(im));
    
    %--- apply LOG and abs for plotting the transform --- 
    fLog = log(1 + abs(fftIm));
    
    %----modify the image in the frequency domain-------
    fftImMod=fftIm;
    x_d=24;           %x distance between the 2 images
    y_d=4;            %y distance between the 2 images
    N = 305;        %the dimensions of the image NxM = 305x305 
    M = 305;        %the dimensions of the image NxM = 305x305 
    
    for r=1:size(fftIm,1)
          for k=1:size(fftIm,2)
              divisionVal(r,k) =  1+exp((-2*(pi)*1i)*((r-1)*y_d/N + (k-1)*x_d/M));    
          end;
      end;
    
    
      fftImMod=fftIm./divisionVal;
    
    %--- apply LOG and abs for plotting the modified transform --- 
    fLogAfterMod = log(1 + abs(fftImMod));
    
    %--- return to the image space ---
    N=60;
    result=ifft2((fftImMod([1:N end-N-2:end],[1:N end-N-2:end])));
    
    % --- display results ---
    colormap(gray)
    subplot(2,2,1),imagesc(im); title('Original Image')
    subplot(2,2,2),imagesc(fLog); title('Fourier Image')
    subplot(2,2,3),imagesc(fLogAfterMod); title('Modified Fourier')
    subplot(2,2,4),imagesc(abs(result)); title('Result Image')
    %set(gca,'clim',[0 250])