0

我有一个 RGB 图像,我试图找出这个图像是聚焦还是失焦。一开始我做了一个 2D FFT,但是当我绘制径向光谱时,在焦点上的图像和失焦的图像之间没有明显的区别。有人告诉我要使用图像的衍生物,但是当我绘制这个新光谱时,结果看起来不像我预期的那样。因为是更大程序的一部分,我这里写的是伪代码,这不是完整的程序

 %read the file and the part of the image I am working on
  file='test1.jp2'
  image_part=imread(file,'PixelRegion',{[xpixmin xpixmax],[ypixmin ypixmax]});
 %derivatives
  dx=diff(double(image_part),1,1);
  dy=diff(double(image_part),1,2);
  ........
  created tapers with Slepian sequences (dpss), multiplied with dx and dy and 
  then new outcome is tap_dx,tap_dy
  .......   
 %FFT
  fft2_dx=fft2(tap_dx)
  fft2_dy=fft2(tap_dy)
 %magnitude and fftshift
  fft2_abs_dx=fftshift(abs(fft2_dx))
  fft2_abs_dy=fftshift(abs(fft2_dy))
  %to take the radial spectrum average the Fourier spectrum over the different   
  frequencies(fr)
   avg_dx=mean(fft2_abs_dx(fr))
   avg_dy=mean(fft2_abs_dy(fr))   
   plot(fr,avg_dx+avg_dy)

在我做导数之前,径向图从最大值开始,然后以单调的方式下降到最小值。当我绘制导数时,虽然径向图从最大值开始然后到最小值,然后它再次增加,这似乎不正确。有没有人尝试使用这种技术来确定图像是聚焦还是失焦。我还没有找到任何相关的参考资料。

该项目的目的不是校正图像的焦点,而是确定图像是否失焦以及是否使用自动方式拒绝它。
先感谢您。

4

1 回答 1

1

散焦通过光学系统瞳孔中的二次项来表现。您将需要选择一些基组,例如 Zernike 或 Seidel,然后计算出与散焦相对应的系数的梯度。

您收集的图像是系统点扩散函数 (PSF) 和您正在成像的真实对象的卷积:

ImageData = Image ** PSF + noise, where ** denotes convolution.

请注意,PSF 由(PSF 复振幅的复 conj 平方)给出:

PSF = PSF_ca *. conj(PSF_ca), 

在哪里

PSF_ca  = FFT(pupil_complex_amplitude),

pupil_complex_amplitude = A*exp(-i*2*pi*pupil_phase), A is the aperture function.

和(i * i = -1):

pupil_phase = defocusCoeff*basisTerm;

您可以使用卷积定理处理 ImageData 表达式中的卷积,这样您就可以用 FFT 表示它并直接求解模糊核(PSF)。这称为盲反卷积,因为您既不知道真实对象也不知道 PSF。

一旦你有了 PSF,你就可以在 PSF 上进行相位检索以获得散焦,也就是说,如果你想严格解决这个问题。

我认为 Matlab 帮助文件中有一些反卷积的例子,你看过那里的例子吗?

实施“图像渐变”并不能解决图像散焦问题,您为什么要这样做?

于 2013-11-19T20:15:48.937 回答