用python实现基于概率分布的超声图像与自然图像性质差异分析这一课题,使用opencv,两种图像的文件类型都是jpg,超声图像的文件路径是‘D:\zzz\zus2’,自然图像的文件路径是‘D:\zzz\zna2’,两种图像都有84张,需要对比两种图像的特征必须有颜色,纹理,形状,差异性分析方法也需要多种,包括完整详细代码
时间: 2023-09-17 22:12:45 浏览: 87
利用OpenCV和Python实现查找图片差异
以下是基于概率分布的超声图像与自然图像性质差异分析的Python代码。其中使用了OpenCV库和Scipy库。
```python
import cv2
import numpy as np
import os
from scipy.stats import wasserstein_distance
from scipy.spatial.distance import directed_hausdorff
from scipy.ndimage import gaussian_filter
# 设置文件路径
path1 = 'D:/zzz/zus2/'
path2 = 'D:/zzz/zna2/'
# 定义函数:计算颜色分布
def color_histogram(image):
# 将图像从BGR色彩空间转换为HSV色彩空间
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 计算HSV色彩空间的直方图
hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
# 进行归一化处理
cv2.normalize(hist, hist, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)
return hist.flatten()
# 定义函数:计算纹理特征
def texture_features(image):
# 将图像从BGR色彩空间转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 使用高斯滤波平滑图像
blur = gaussian_filter(gray, sigma=5)
# 计算拉普拉斯算子的绝对值
laplacian = np.abs(cv2.Laplacian(blur, cv2.CV_64F))
# 计算图像的均值和标准差
mean, std = cv2.meanStdDev(laplacian)
# 返回均值和标准差
return mean[0][0], std[0][0]
# 定义函数:计算形状特征
def shape_features(image):
# 将图像从BGR色彩空间转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化图像
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 计算轮廓
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 计算轮廓的面积和周长
area = cv2.contourArea(contours[0])
perimeter = cv2.arcLength(contours[0], True)
# 返回面积和周长
return area, perimeter
# 定义函数:计算两个图像之间的颜色分布差异
def color_difference(image1, image2):
hist1 = color_histogram(image1)
hist2 = color_histogram(image2)
distance = wasserstein_distance(hist1, hist2)
return distance
# 定义函数:计算两个图像之间的纹理特征差异
def texture_difference(image1, image2):
mean1, std1 = texture_features(image1)
mean2, std2 = texture_features(image2)
distance = np.abs(mean1 - mean2) + np.abs(std1 - std2)
return distance
# 定义函数:计算两个图像之间的形状特征差异
def shape_difference(image1, image2):
area1, perimeter1 = shape_features(image1)
area2, perimeter2 = shape_features(image2)
distance = np.abs(area1 - area2) + np.abs(perimeter1 - perimeter2)
return distance
# 定义函数:计算两个图像之间的总体差异
def total_difference(image1, image2):
color_diff = color_difference(image1, image2)
texture_diff = texture_difference(image1, image2)
shape_diff = shape_difference(image1, image2)
distance = color_diff + texture_diff + shape_diff
return distance
# 对比超声图像和自然图像
for i in range(84):
# 读取超声图像和自然图像
image1 = cv2.imread(path1 + 'zus' + str(i+1) + '.jpg')
image2 = cv2.imread(path2 + 'zna' + str(i+1) + '.jpg')
# 计算两个图像之间的总体差异
distance = total_difference(image1, image2)
# 输出差异性分析结果
print('超声图像zus' + str(i+1) + '与自然图像zna' + str(i+1) + '之间的总体差异为:', distance)
```
以上代码实现了对超声图像和自然图像的颜色分布、纹理特征、形状特征进行分析,并计算了两种图像之间的总体差异。其中使用了Wasserstein距离、绝对值距离和绝对值差分别计算颜色分布差异、纹理特征差异和形状特征差异。
阅读全文