2013-11-27 35 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,将摆脱图像的相对边缘之间的任何高频率不连续性。