图像特征提取及识别实验代码
时间: 2024-12-24 21:32:20 浏览: 6
### 实验三 图像特征提取及识别
#### 实验目的
1. 掌握基于PCA的图像特征提取原理
2. 掌握基于模板匹配模式的原理及应用
3. 理解最小距离分类器的原理及应用
#### 实验环境
- Windows 7
- Python 3.0 及以上
- PyCharm 或者 Notebook
- OpenCV 3.4 及以上
- NumPy 1.16 及以上
#### 实验内容
1. **基于相关的模板匹配识别**:在一组照片中识别出指定的人脸。
2. **基于PCA的图像特征提取**。
3. **利用最小距离分类器分类三种鸢尾属植物**。
#### 实验步骤与参考代码
##### 1. 基于相关的人脸匹配识别
将以下MATLAB代码用Python实现:
```python
import cv2
import numpy as np
# 读取图像
I = cv2.imread('patterns1.bmp', 0)
I1 = cv2.imread('pat1.bmp', 0)
I2 = cv2.imread('pat2.bmp', 0)
I3 = cv2.imread('张毅.bmp', 0)
# 计算模板匹配
J1 = cv2.matchTemplate(I, I1, method=cv2.TM_CCOEFF_NORMED)
max_J1 = np.max(J1)
J2 = cv2.matchTemplate(I, I2, method=cv2.TM_CCOEFF_NORMED)
max_J2 = np.max(J2)
J3 = cv2.matchTemplate(I, I3, method=cv2.TM_CCOEFF_NORMED)
max_J3 = np.max(J3)
print("最大匹配值 J1:", max_J1)
print("最大匹配值 J2:", max_J2)
print("最大匹配值 J3:", max_J3)
```
思考:将目标3.bmp旋转90度得到目标31,会出现什么结果?
##### 2. 基于PCA的图像特征提取
上网查找基于PCA人脸特征提取及识别算法,并用Python实现。
##### 3. 鸢尾植物识别
利用最小距离分类器分类三种鸢尾属植物。
```python
from sklearn.datasets import load_iris
import numpy as np
# 载入数据集
data = load_iris()
X = data.data
y = data.target
# 每类的前40个样本用于生成代表该类的模板,后10个作为独立的测试样本
m1 = np.mean(X[:40], axis=0)
m2 = np.mean(X[50:90], axis=0)
m3 = np.mean(X[100:140], axis=0)
# 测试样本集
Test = np.vstack((X[40:50], X[90:100], X[140:150]))
# 测试样本集对应的类别标签
classLabel = np.array([1] * 10 + [2] * 10 + [3] * 10)
# 利用最小距离分类器分类测试样本
class_pred = []
for sample in Test:
d1 = np.linalg.norm(sample - m1)
d2 = np.linalg.norm(sample - m2)
d3 = np.linalg.norm(sample - m3)
class_pred.append(np.argmin([d1, d2, d3]) + 1)
# 计算识别率
nErr = np.sum(np.array(class_pred) != classLabel)
rate = 1 - nErr / len(class_pred)
print(f"识别率为 {rate * 100:.2f}%")
```
希望这些代码对你有帮助!如果有任何问题,请随时提问。
阅读全文