2013-11-19 2 views
0

У меня есть изображение RGB, и я пытаюсь найти, находится ли это изображение в фокусе или не в фокусе. Вначале я сделал 2D FFT, но когда я построил радиальный спектр, не было четкого различия между изображениями, которые находятся в фокусе, и изображениями, которые не в фокусе. Мне сказали использовать производные изображений, но когда я рисую этот новый спектр, результаты не выглядят так, как я ожидал. Поскольку она является частью более крупной программы, я пишу псевдокод здесь, это не полная программаИзображение производное и FFT-Matlab

%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) 

Прежде, чем я сделал производное радиальный участок начинается от точки максимума, а затем спускается в монотонном путь к минимальному значению. Когда я рисую производную, хотя радиальный график начинается с максимальной точки, затем переходит в точку минимума, а затем снова увеличивается, что кажется неправильным. Кто-нибудь пытался найти, находится ли изображение в фокусе или не в фокусе, используя эту технику. Я не нашел для этого ссылок.

Цель проекта - не корректировать фокус изображения, но выяснить, находится ли изображение вне фокуса и отклонить его автоматическим способом.
Спасибо заранее.

ответ

1

Дефокусировка проявляется через квадратичный член в зрачке оптической системы. Вам нужно будет выбрать какой-то базовый набор, скажем, Зернике или Зейдел, затем выработать градиент w.r.t для коэффициента, соответствующего расфокусировке.

Изображение, которое вы собрали является сверткой функции точечная система распространения (ФСФ) и истинного объекта вы формирования изображения:.

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

Обратите внимание, что PSF задается (комплексная Conj квадрат PSF комплексная амплитуда):

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. 

и (с я * я = -1):

pupil_phase = defocusCoeff*basisTerm; 

Вы можете обрабатывать свертку в выражении для ImageData, используя теорему о свертке, таким образом вы можете выразить это в терминах FFTs и решать непосредственно для ядра размытия (PSF). Это называется слепой деконволюцией, потому что вы не знаете ни истинного объекта, ни PSF.

Как только у вас есть PSF, вы делаете восстановление фазы на PSF, чтобы получить дефокусировку, то есть, если вы хотите решительно решить эту проблему.

Я думаю, что есть несколько примеров деконволюции в файлах справки Matlab, посмотрели ли вы на примеры?

Реализация «градиента изображения» не решает для дефокусировки изображения, почему вы это делаете?

+0

Хороший ответ. Просто чтобы добавить к вашему объяснению, [эта страница] (http://yuzhikov.com/articles/BlurrImagesRestoration1.htm) имеет отличную демонстрацию этих операций, включая слепую деконволюцию, с кодом MATLAB. См. Также [этот пост MathWorks] (http://blogs.mathworks.com/steve/2007/08/13/image-deblurring-introduction/). – chappjc

+0

Да, это отличная ссылка. Существует немало ресурсов Matlab для решения этой проблемы и других приложений обработки изображений.Я просто не понимаю подход к градиенту изображения, который не решает для расфокусировки. –

+0

Похоже, что кто-то сделал предложение о манжете, не имея большого знания домена. – chappjc