Я новичок в Matlab, и у меня есть проект, который включает обработку изображений.фокус изображения и FFT
У меня есть несколько изображений RGB, и мне нужно найти способ отделить фокус от фокусных изображений. Мне не нужно исправлять фокус вне фокуса, мне просто нужно найти, что не в фокусе, и удалить их. Я сделал FFT2
, а затем использовал радиальное среднее изображение спектра мощности, чтобы увидеть, есть ли разница между фокусом или фокусом, но я не вижу разницы между ними.
я решил использовать градиент изображения
[gradx,grady]=gradient(image)
, а затем принять величину
new_image=sqrt((gradx.^2)+(grady.^2))
и попытаться сделать FFT2
с помощью new_image
Теперь вместо image
. Спектр мощности не похож на то, что я ожидаю, поэтому я не уверен, должен ли я делать FFT2
по new_image
gradx
и grady
отдельно. У кого-нибудь есть какие-то мысли о том, правильно ли это сделать?
Я также думал, что вместо того, чтобы использовать градиент использовать Собел маска
mask=fspecial('sobel')
mask_x=imfilter(image,mask)
mask_y=imfilter(image,mask')
new_image=sqrt((mask_x.^2)+(mask_y.^2))
, а затем сделать FFT2
в new_image
но опять же спектр мощности не является правильным. Я ожидаю, что он начнется с нуля и вместо этого начнется с самого высокого значения и будет экспоненциально снижаться.
Кто-нибудь пытался классифицировать изображения, используя этот метод? Спасибо за чтение.
Трудно представить себе, что именно означает «спектр мощности не прав». Я ожидаю, что он начнется с нуля, а вместо этого начнется с самого высокого значения и будет экспоненциально снижаться ». Но мне кажется, что вы можете отказаться от вызова FFTSHIFT перед проверкой результатов. – jez
'fftshift' ваш спектр !! – Shai
Извините за путаницу, я забыл, что уже использовал FFTSHIFT. – user3043257