逐行解释下列代码 :import cv2 import numpy as np import matplotlib.pyplot as plt def mean_filter(img,kernel_size=9): """ 均值滤波 """ img_mean = cv2.blur(img,ksize=(kernel_size,kernel_size)) return img_mean def median_filter(img,kernel_size=9): """ 中值滤波 """ img_median = cv2.medianBlur(img,ksize=(kernel_size,kernel_size)) return img_median def median_filter(img,kernel_size=9,sigma=0): """ 高斯滤波 """ sigma_x = sigma sigma_y = sigma img_gau = cv2.GaussianBlur(img,(kernel_size,kernel_size),sigma_x,sigma_y) return img_gau img_path = "input.jpg" # 你应该更改此处更改你使用的图像的路径 img = cv2.imread(img_path)# .astype(np.float32) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 该变图像的格式 BGR->RGB height, width, channel = img.shape # 记录图像的大小 plt.figure(dpi=200) plt.subplot(141), plt.imshow(img), plt.title('Original Photo'),plt.xticks([]),plt.yticks([]) # 展示原始图像的样子 img_mean = mean_filter(img) plt.subplot(142), plt.imshow(img_mean), plt.title('mean filter'),plt.xticks([]),plt.yticks([]) # 展示原始图像的样子 img_medi = median_filter(img) plt.subplot(143), plt.imshow(img_medi), plt.title('median filter'),plt.xticks([]),plt.yticks([]) # 展示原始图像的样子 img_gau = median_filter(img) plt.subplot(144), plt.imshow(img_gau), plt.title('Gau filter'),plt.xticks([]),plt.yticks([]) # 展示原始图像的样子 plt.savefig('result.jpg')
时间: 2023-06-07 09:07:24 浏览: 116
这段代码是用来实现图像处理中的几种滤波方法。通过导入cv2、numpy和matplotlib.pyplot三个库,在函数中分别调用了均值滤波、中值滤波和高斯滤波来处理图像。其中均值滤波和中值滤波都可以通过cv2库中的blur和medianBlur函数来实现,高斯滤波则是通过cv2库中的GaussianBlur函数来实现。在这三个函数中,都可以设置滤波核的大小和sigma值。最后,通过导入的plt库来将处理后的图像绘制出来,从而实现图像的滤波处理。而最后一行img_path = "input.jpg"则是定义了处理的图像的路径。
相关问题
用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))
```
完整代码如下:
阅读全文