Проект, связанный с обработкой изображения, т. е. с расчетом углового смещения того же изображения при смещении его средой с определенным показателем преломления. Нам нужно создать приложение, которое сопоставляет 2 изображения (корреляция фазы/2D?), а затем строит график с использованием Chaco и Mayavi (две библиотеки на Python). Существует ли какое-либо другое существующее программное обеспечение для шаблонов (FOSS), на котором мы можем основывать наше приложение или использовать его в качестве эталона?
Существует ли библиотека корреляции фаз изображения для Python?
Ответы (3)
Фазовая корреляция, описанная на http://en.wikipedia.org/wiki/Phase_correlation, взята из https://github.com/michaelting/Phase_Correlation/blob/master/phase_corr.py.
def phase_correlation(a, b):
G_a = np.fft.fft2(a)
G_b = np.fft.fft2(b)
conj_b = np.ma.conjugate(G_b)
R = G_a*conj_b
R /= np.absolute(R)
r = np.fft.ifft2(R).real
return r
Вот пример: мы берем два похожих изображения, но с разными фазами, и строим фазовую корреляцию (черное изображение с одной белой точкой при соответствующей разности фаз).
from scipy import misc
from matplotlib import pyplot
import numpy as np
#Get two images with snippet at different locations
im1 = np.mean(misc.face(), axis=-1) #naive colour flattening
im2 = np.zeros_like(im1)
im2[:200,:200] = im1[200:400, 500:700]
corrimg = phase_correlation(im1, im2)
r,c = np.unravel_index(corrimg.argmax(), corrimg.shape)
pyplot.imshow(im1)
pyplot.plot([c],[r],'ro')
pyplot.show()
pyplot.imshow(im2)
pyplot.show()
pyplot.figure(figsize=[8,8])
pyplot.imshow(corrimg, cmap='gray')
pyplot.show()
используя scipy, это должно быть однострочным (хотя вы, вероятно, можете избежать пакета ndimage)
from scipy.fftpack import fftn, ifftn
corr = (ifftn(fftn(a)*ifftn(b))).real
предполагая, что вам удалось прочитать исходные изображения в массивы numpy a и b. Если это 2D-изображения, Mayavi может быть немного излишним, и, вероятно, было бы проще использовать matplotlib, чем chaco. Если вы используете matplotlib, вы можете сделать все с помощью
from pylab import *
corr = (ifftn(fftn(a)*ifftn(b))).real
imshow(corr)
Scipy содержит множество процедур обработки изображений в пакете scipy.ndimage. .