python使用svm将两种2d图像分类代码
时间: 2024-01-06 16:06:16 浏览: 62
以下是一个基本的 Python SVM 2D 图像分类代码,用于将两种不同的2D图像分类:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
# 创建两个类别的数据集
class_1 = np.random.randn(50, 2) + np.array([2, 2])
class_2 = np.random.randn(50, 2) + np.array([-2, -2])
X = np.vstack((class_1, class_2))
y = np.hstack((np.ones(50), -np.ones(50)))
# 训练 SVM 模型
clf = svm.SVC(kernel='linear', C=1)
clf.fit(X, y)
# 绘制决策边界
w = clf.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(-5, 5)
yy = a * xx - (clf.intercept_[0]) / w[1]
# 绘制训练样本和决策边界
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.plot(xx, yy, 'k-')
plt.show()
```
这个示例中,我们先创建了两个类别的数据集,然后使用 SVM 模型进行训练,并绘制决策边界和训练样本。你可以根据自己的需求修改代码以适应不同的数据集和特征。
相关问题
用python实现基于概率分布的超声图像与自然图像性质差异分析这一课题,不用greycomatrix和greycoprops,使用opencv,不用两种图像的文件类型都是jpg,超声图像的文件路径是‘D:/zzz/us2’,自然图像的文件路径是‘D:/zzz/na2’,两种图像都有84张,图片形状都不同,图像名称是随机的,需要对比两种图像的特征必须有颜色,纹理,形状,差异性分析方法也需要多种,包括完整详细代码
首先,我们需要导入必要的库:
```python
import cv2
import numpy as np
import os
import matplotlib.pyplot as plt
```
然后,我们需要定义一些函数来提取图像的特征。
#### 提取颜色特征
我们可以使用 HSV 色彩空间来提取颜色特征,因为在 HSV 空间中,颜色信息被分离成了亮度,色调和饱和度三个通道。我们可以计算每个通道的均值和标准差来描述图像的颜色特征。
```python
def extract_color_feature(img):
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
return np.concatenate((np.mean(h), np.mean(s), np.mean(v), np.std(h), np.std(s), np.std(v)))
```
#### 提取纹理特征
我们可以使用 Gabor 滤波器来提取纹理特征。Gabor 滤波器是一种线性滤波器,可以模拟人类视觉系统中的简单细胞。我们可以通过计算图像的 Gabor 滤波器响应来描述图像的纹理特征。
```python
def extract_texture_feature(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernels = []
for theta in np.arange(0, np.pi, np.pi / 4):
for sigma in (1, 3):
for frequency in (0.05, 0.25):
kernel = cv2.getGaborKernel((5, 5), sigma, theta, frequency, 0.5, 0, ktype=cv2.CV_32F)
kernels.append(kernel)
features = np.zeros(len(kernels))
for i, kernel in enumerate(kernels):
filtered = cv2.filter2D(gray, cv2.CV_8UC3, kernel)
features[i] = filtered.mean()
return features
```
#### 提取形状特征
我们可以使用图像的边缘信息来描述图像的形状特征。我们可以通过计算图像的 Canny 边缘图像来提取边缘信息。
```python
def extract_shape_feature(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200)
return edges.mean()
```
接下来,我们定义一个函数来加载图像数据集并提取特征。
```python
def load_data(path):
X = []
y = []
for f in os.listdir(path):
img_path = os.path.join(path, f)
img = cv2.imread(img_path)
color_feature = extract_color_feature(img)
texture_feature = extract_texture_feature(img)
shape_feature = extract_shape_feature(img)
feature = np.concatenate((color_feature, texture_feature, shape_feature))
X.append(feature)
if 'us' in f:
y.append(0)
else:
y.append(1)
return np.array(X), np.array(y)
```
现在我们可以加载数据集并拆分为训练集和测试集:
```python
X, y = load_data('D:/zzz')
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
我们可以使用多种分类器来对两种图像进行分类。这里我们使用支持向量机和随机森林分类器。
```python
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
svm = SVC(kernel='linear')
svm.fit(X_train, y_train)
print('SVM Accuracy:', svm.score(X_test, y_test))
rf = RandomForestClassifier(n_estimators=100)
rf.fit(X_train, y_train)
print('Random Forest Accuracy:', rf.score(X_test, y_test))
```
最后,我们可以使用混淆矩阵和分类报告来评估分类器的性能。
```python
from sklearn.metrics import confusion_matrix, classification_report
y_pred_svm = svm.predict(X_test)
print('SVM Confusion Matrix:')
print(confusion_matrix(y_test, y_pred_svm))
print('SVM Classification Report:')
print(classification_report(y_test, y_pred_svm))
y_pred_rf = rf.predict(X_test)
print('Random Forest Confusion Matrix:')
print(confusion_matrix(y_test, y_pred_rf))
print('Random Forest Classification Report:')
print(classification_report(y_test, y_pred_rf))
```
完整代码如下:
阅读全文