我是Matlab的新手,我有一个涉及图像处理的项目。
我有许多RGB图像,我需要找到一种方法将焦点与焦点图像分开。我不需要纠正失焦的焦点,我只需找到哪些是焦点并将其删除。我对图像做了FFT2
,然后使用功率谱图像的径向平均值来查看焦点或焦点之间是否存在差异,但我看不出两者之间的差异。
我决定使用图像的渐变
[gradx,grady]=gradient(image)
然后取大小
new_image=sqrt((gradx.^2)+(grady.^2))
并尝试使用FFT2
而不是new_image
来image
。功率谱看起来不像我期望的那样,所以我不确定是否应该分别对FFT2
和new_image
的{{1}}进行gradx
。有没有人想过这是否是正确的方法呢?
我还在考虑不使用渐变来使用Sobel蒙版
grady
然后在mask=fspecial('sobel')
mask_x=imfilter(image,mask)
mask_y=imfilter(image,mask')
new_image=sqrt((mask_x.^2)+(mask_y.^2))
中执行FFT2
但功率谱再次不正确。我希望它从零开始,而不是从最高值开始并以指数方式下降。
是否有人尝试使用此方法对图像进行分类?谢谢你的阅读。
答案 0 :(得分:0)
fftimg = fft2(new_image);
imagesc(abs(fftshift(fftimg(2:end,2:end))))
此处(2:end,2:end)
将避免显示图像的DC分量,而fftshift
会将低频分量翻转到中心。
我认为观察对焦和离焦图像中的高频信号是一个很好的尝试,因为前者可能有更清晰的边缘,这表明更多的高频成分。并且,等效地计算原始图像的梯度的sobel滤波器通常用于提取图像中的边缘,因此您的方法是有意义的。然而,我认为你不需要分别获得gradx
和grady
,因为索贝尔已经sqrt(Dx.^2+Dy.^2)
Dx
和Dy
是x和x的部分衍生物方向。
答案 1 :(得分:0)
DCT(而非FFT / DFT)将消除图像相对边缘之间的任何高频不连续性。