2. 利用LBP算法提取两张图像的特征,生成直方图显示并比较两个图像特征间的差异代码
时间: 2024-03-26 07:41:00 浏览: 68
LBP特征提取及其直方图
3星 · 编辑精心推荐
下面是利用LBP算法提取两张图像的特征,生成直方图显示并比较两个图像特征间的差异的Python代码:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# LBP特征提取函数
def LBP(img, P=8, R=1):
h, w = img.shape
dst = np.zeros_like(img)
for i in range(R, h - R):
for j in range(R, w - R):
center = img[i, j]
code = 0
for n in range(P):
x = i + R * np.cos(2 * np.pi * n / P)
y = j - R * np.sin(2 * np.pi * n / P)
x1, y1 = int(np.floor(x)), int(np.floor(y))
x2, y2 = int(np.ceil(x)), int(np.ceil(y))
fx = x - x1
fy = y - y1
f1 = (1 - fx) * img[x1, y1] + fx * img[x2, y1]
f2 = (1 - fx) * img[x1, y2] + fx * img[x2, y2]
if f1 > center:
code += 2 ** n
if f2 > center:
code += 2 ** n
dst[i, j] = code
return dst
# 读取两张图像
img1 = cv2.imread('image1.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)
# 提取LBP特征
lbp1 = LBP(img1)
lbp2 = LBP(img2)
# 生成直方图并显示
plt.hist(lbp1.ravel(), bins=256, range=(0, 255))
plt.hist(lbp2.ravel(), bins=256, range=(0, 255), alpha=0.5)
plt.legend(['Image 1', 'Image 2'])
plt.show()
# 计算两个图像特征间的差异
diff = np.sum(np.abs(lbp1 - lbp2)) / (lbp1.shape[0] * lbp1.shape[1])
print('LBP特征差异:', diff)
```
其中,P和R分别表示LBP算法的参数,可以根据实际情况进行调整。读取两张图像后,利用LBP特征提取函数LBP提取图像的LBP特征,并生成直方图显示。最后,计算两个图像特征间的差异,得到LBP特征差异值。
阅读全文