2013-11-27 36 views
2

我是一個新來Matlab,我有一個涉及圖像處理的項目。圖像重點和FFT

我有一些RGB圖像,我需要找到一種方法來將焦點與焦點圖像分開。我不需要糾正焦點不集中的焦點,我只需要找出哪些焦點不在焦點並將其刪除。我已經對圖像做了FFT2,然後使用功率譜圖像的徑向平均值來查看焦點之間或焦點之外是否有差異,但我沒有看到兩者之間的差異。

我決定用梯度的圖象

[gradx,grady]=gradient(image) 

的,然後採取幅度

new_image=sqrt((gradx.^2)+(grady.^2)) 

並嘗試使用該new_image現在,而不是imageFFT2。功率譜看起來不像我期望的那樣,所以我不確定是否應該分別在gradxgradynew_image上執行FFT2。有沒有人有任何想法,這是否是正確的方式來做到這一點?

我也在想,而不是使用漸變中使用的索貝爾掩蓋

mask=fspecial('sobel') 
mask_x=imfilter(image,mask) 
mask_y=imfilter(image,mask') 
new_image=sqrt((mask_x.^2)+(mask_y.^2)) 

然後在new_imageFFT2但同樣的功率譜是不正確的。我期望它從零開始,而不是從最高值開始並以指數形式下降。

有沒有人試圖用這種方法分類圖像?謝謝你的閱讀。

+1

很難直觀地看到你的意思是「功率譜不正確,我期望它從零開始,而是從最高值開始,並呈指數下降。」但它暗示我可能在檢查結果之前忽略調用FFTSHIFT。 – jez

+1

'fftshift'你的光譜! – Shai

+0

對不起,我忽略了我已經在使用FFTSHIFT。 – user3043257

回答

0
fftimg = fft2(new_image); 
imagesc(abs(fftshift(fftimg(2:end,2:end)))) 

這裏(2:end,2:end)將避免圖像的DC分量的顯示,並fftshift將翻轉的低頻分量到中心。

我認爲觀察聚焦和失焦圖像中的高頻信號是一種很好的嘗試,因爲前者可能具有更銳利的邊緣,這表示更多的高頻成分。並且等效地計算原始圖像的梯度的sobel濾波器通常用於提取圖像中的邊緣,因此您的方法是有意義的。但我不認爲你需要分別得到gradxgrady,因爲sobel已經是sqrt(Dx.^2+Dy.^2),其中DxDy是沿着x和y方向的部分導數。

+0

謝謝你的回答。我沒有把它放在我最初的問題中,但我已經完成了FFTSHIFT。當我添加(2:結束)位時,它以小頻率固定頻譜。在數學上,我期待漸變的頻譜開始和結束朝向零(幾乎像鐘形曲線)。現在它從零開始,但在高頻時不會翻轉並回到零點。還有其他建議嗎? – user3043257

+0

您的圖像是2或3維(RGB 3通道)?什麼是數據格式? unit8或雙?我嘗試了一個圖像,選擇了一個通道並在處理之前將其轉換爲雙倍圖像,而我沒有觀察到您遇到的問題。 – lennon310

+0

圖像是2D(RGB 3通道),當我用IMREAD讀取時,將其轉換爲雙倍。我剛與紅色頻道合作嘗試讓它運作起來。通過您的示例圖像,您可以看到圖像漸變頻譜的鐘形曲線? – user3043257

0

一個DCT,而不是一個FFT/DFT,將擺脫圖像的相對邊緣之間的任何高頻率不連續性。