Существует ли библиотека корреляции фаз изображения для Python?

Проект, связанный с обработкой изображения, т. е. с расчетом углового смещения того же изображения при смещении его средой с определенным показателем преломления. Нам нужно создать приложение, которое сопоставляет 2 изображения (корреляция фазы/2D?), а затем строит график с использованием Chaco и Mayavi (две библиотеки на Python). Существует ли какое-либо другое существующее программное обеспечение для шаблонов (FOSS), на котором мы можем основывать наше приложение или использовать его в качестве эталона?


person user333117    schedule 05.05.2010    source источник


Ответы (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()

введите здесь описание изображения

person Simon Streicher    schedule 24.10.2014
comment
Просто несколько практических советов, не забудьте сначала применить соответствующие окна к входным изображениям. См. 2D-окна Хэмминга или Гаусса .com/questions/7687679/. - person Simon Streicher; 03.11.2014

используя 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)
person user488551    schedule 28.10.2010

Scipy содержит множество процедур обработки изображений в пакете scipy.ndimage. .

person Eric O Lebigot    schedule 05.05.2010