簡體   English   中英

在零填充頻域之后縮放fft2

[英]Scaling fft2 after zeropad frequency domain

我有一個帶有兩個圓圈的圖像I1 =(50x50)-A(像素的強度值為100)和B(強度值為500)。

我想將圖像調整為I2 =(100x100)。 我先對圖像進行FFT2處理,然后將其零填充,將FT設為100x100的矩陣,然后再次進行IFFT2處理。

FT = fftshift(fft2(M)); 
FT = padarray(FT,[50 50]);
I2 = ifft2(ifftshift(FT));

因此,現在我有了一個尺寸為100x100的新圖像,但是現在圓的振幅有所不同。 如何解決此縮放問題?

此后,我應用蒙版僅選擇圓A,所以現在我只有I3 =(100x100),僅圓A。對於此圖像,我再次應用FFT2,並僅將FT的中心作為50x50的一部分,然后執行IFFT2得到另一個圖像PSF =(50x50),在這里我可以看到該圓的點擴展函數(PSF)。

FT = fftshift(fft2(I3)); 
FTcenter = FT(25:75,25:75);
I4 = ifft2(ifftshift(FTcenter));

同樣,我是否也應該在此處應用任何縮放比例?

我喜歡將內置的interpft用於基於FFT的正弦插值,因為它消除了零填充,移位,縮放等所有edit interpft (並且您可以檢查它的工作方式: edit interpft ,這都是合法的) 。 它僅執行一維插值,但是您可以在兩個維度上對二維進行兩次插值。

我制作了一個100 x 100灰度圖像,其中包含兩個圓,其最小/最大強度為[29,255]:

起始圖片

然后,在Matlab REPL中:

>> im = double(imread('circles.png'));
>> whos im
  Name        Size             Bytes  Class    Attributes

  im        100x100            80000  double

>> imup = interpft(interpft(im, 2*size(im,1), 1), 2*size(im,2), 2);
>> whos imup
  Name        Size              Bytes  Class     Attributes

  imup      200x200            320000  double

這將創建2倍的高采樣圖像。 最小值和最大值為[23.059,271.66],位於原始[29,255]的邊界之外,因此我重新縮放了放大圖像的值,使其與原始圖像位於相同的邊界,並轉換為uint8並保存作為PNG:

>> rescaled = interp1([min(imup(:)), max(imup(:))], [min(im(:)), max(im(:))], imup);
>> imwrite(uint8(rescaled), 'circles-up.png')

上采樣

仔細查看此結果,您會發現為什么放大后的數組的最小值/最大值比原始值寬:這種正弦插值會導致Gibbs在圖像的尖銳過渡處(如圓邊) 響起 ,從而導致放大后的圖像超過峰值和降低谷值。


interpft既可以插值(上采樣)也可以插值(下采樣)。 因此,這是一個完整的腳本,但有一個調整:我將原始圖像中的顏色“反轉”,因此背景是黑色而不是白色:這使蒙版變得更加容易:

clearvars
interpft2 = @(x, sz) interpft(interpft(x, sz(1), 1), sz(2), 2);

im = 255 - double(imread('circles.png'));
imup = interpft2(im, 2*size(im));

mask = double(imread('circles-mask.png')) ~= 255;
psf = interpft2(mask .* imup, round(size(imup) / 2));
imwrite(uint8(255 - round(psf)), 'psf.png')

這是上采樣circles-mask.png蒙版(黑色表示要保留的數據):

面具

這是生成的psf圖像(反轉),與沒有小圓圈的原始circles.png圖像相同:

點擴散功能

看起來,由於線性原因,在2x上采樣圖像中應用蒙版等效於在原始圖像中應用較小的蒙版。

因此,我應該問我上面所做的工作是否與您要使用PSF進行的工作相符? 我想再次強調一下,您在問題中描述的插值和抽取步驟(FFT→zeropad→IFFT和FFT→保持中心→IFFT) 恰好interpft功能(加上簿記以確保幅度和對稱性正確) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM