对应文章:Robust Registration of Multimodal Remote Sensing Images Based on Structural Similarity(TGAS)
HOPC的升级版:A local phase based invariant feature for remote sensing image matching
过程:获得相位信息;提取相位的方向特征;
Introduction:
SSD(sum of squared differences):尽管计算快,但是不鲁棒quite sensitive to radiometric changes despite its high computational efficiency
NCC:具有线性不变性,但是不具有非线性不变性is vulnerable to non-linear radiometric differences
MI:具有非线性不变性,但是计算效率低,而且对匹配窗口敏感
基于形状的特征(structure and shape features ):
HOPC方法:
1. Fig3说明频域图像中相位谱更能保存物体的纹理等信息
#对HOPC中Fig3的实现
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import cv2
def shift_ft(gray):
M, N = gray.shape
shift = np.matrix([[pow(-1,i+j) for j in range(N)] for i in range(M)])
U = np.matrix([[np.exp(-1j*2*3.14159*m*i/M) for m in range(M)] for i in range(M)])
V = np.matrix([[np.exp(-1j*2*3.14159*n*j/N) for j in range(N)] for n in range(N)])
return U.dot(np.multiply(gray,shift)).dot(V)
def shift_ift(gray):
M, N = gray.shape
shift = np.matrix([[pow(-1,i+j) for j in range(N)] for i in range(M)])
U = np.matrix([[np.exp(1j*2*3.14159*m*i/M) for m in range(M)] for i in range(M)])
V = np.matrix([[np.exp(1j*2*3.14159*n*j/N) for j in range(N)] for n in range(N)])
return np.multiply(shift,U.dot(img).dot(V))/M/N
#读取图像
img = plt.imread('lena.jpg')
#做傅里叶变换
result=shift_ft(img)
#获得傅里叶变换的幅值和相位
def fuzhi_xiangwei(x):
return (x.real**2+x.imag**2)**(1/2),np.arccos(x.real/((x.real**2+x.imag**2)**(1/2))),np.arccos(x.imag/((x.real**2+x.imag**2)**(1/2)))
ufuzhi = np.frompyfunc(fuzhi_xiangwei,1,3)
fuzhi,xiangwei1,xiangwei2=ufuzhi(result)
result1=ufushu(fuzhi,xiangwei1,xiangwei2)
ift_img1 = abs(shift_ift(result1))#傅里叶逆变换
def fushu(a,b1,b2):
real=a*np.cos(b1)
imag=a*np.cos(b2)
return real+imag*1j
ufushu=np.frompyfunc(fushu,3,1)
#做傅里叶逆变换
img_ift=shift_ift(result)
#随机改变幅值,相位不变,做相同的傅里叶逆变换得到不同幅值,相同相位的图像
result2=ufushu(fuzhi[::-1,::-1],xiangwei1,xiangwei2)#原本幅值为fuzhi,此处将fuzhi改为fuzhi[::-1,::-1]
result3=ufushu(fuzhi.T,xiangwei1,xiangwei2)
ift_img2 = abs(shift_ift(result2))
ift_img3 = abs(shift_ift(result3))
Image.fromarray(ift_img.astype(np.uint8))
结果:
2.利用小波变换来获得方向信息
HOPC特折构造过程:
(1)利用4 scale* 6 orientation的小波变换获得4*6个H*W的复平面小波变换结果。复平面表示变换结果既包括实部,也包括虚部。见https://blog.csdn.net/qq_32425195/article/details/113839287
(2)通过4*6个H*W的复平面小波变换结果可以得到:H*W的PC值和H*W的相位角。其中PC值可以表示像素的局部显著性,相位角可以表示像素的梯度方向。
(3)利用与SIFT和HOG类似的方法:
将PC值看作梯度幅度,相位角看作梯度方向,从而将PC值分配到多个方向中(如分配到8个方向中)
统计1个cell(1个cell包括3*3)个像素,统计该cell的梯度分布直方图
汇总3*3个cell,得到一个block的特征。(9个cell,每个cell有8个方向的值,从而得到72维的值)
一个cell的特征的获取过程
即HOPC是利用小波变换得到的梯度方向分布作为特征。
注意:HOPC中的特征是经过归一化的(一个cell中所有特征是经过L2 norm的),此处的亮度值是没有归一化的。。所以实际的HOPC特征如下: