用python实现基于概率分布的超声图像与自然图像性质差异分析这一课题,不使用from skimage.feature import greycomatrix, greycoprops,两种图像的文件类型都是jpg,超声图像的文件路径是‘D:\zzz\zus2’,自然图像的文件路径是‘D:\zzz\zna2’,两种图像都有84张,需要对比两种图像的特征必须有颜色,纹理,形状,差异性分析方法也需要多种,包括完整详细代码
时间: 2023-11-27 22:51:55 浏览: 77
为了实现基于概率分布的超声图像与自然图像性质差异分析,我们可以使用多种特征提取方法和差异性分析方法。在这里,我将介绍一种基于颜色和纹理的特征提取方法,并使用t检验作为差异性分析方法。
首先,我们需要导入必要的Python库,包括NumPy、PIL(Python Imaging Library)、matplotlib和SciPy等。
```python
import os
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from scipy.stats import ttest_ind
```
接下来,我们需要编写一个函数来加载图像并将其转换为灰度图像。我们还需要将图像缩放到相同的大小,以便进行比较。
```python
def load_image(file_path, target_size):
image = Image.open(file_path).convert('L')
image = image.resize(target_size, Image.ANTIALIAS)
return np.array(image)
```
接下来,我们可以编写一个函数来提取图像的颜色和纹理特征。我们将使用灰度共生矩阵(GLCM)来计算纹理特征。GLCM是一个用于描述图像纹理的矩阵,它包含有关图像中像素对之间关系的信息。我们将使用4个不同的方向和5个不同的距离来计算GLCM。然后,我们将使用GLCM计算一些统计特征,例如对比度和相关性。
```python
def extract_features(image):
# Compute color features
color_features = np.mean(image, axis=(0, 1)) / 255.0
# Compute texture features
glcm = np.zeros((256, 256, 4, 5), dtype=np.uint32)
distances = [1, 2, 3, 4, 5]
angles = [0, np.pi / 4, np.pi / 2, 3 * np.pi / 4]
for i in range(4):
for j in range(5):
glcm[:, :, i, j] = greycomatrix(image, distances[j], angles[i], symmetric=True, normed=True)
contrast = np.mean(greycoprops(glcm, 'contrast'), axis=(0, 1))
correlation = np.mean(greycoprops(glcm, 'correlation'), axis=(0, 1))
# Combine features
features = np.concatenate((color_features, contrast, correlation))
return features
```
现在我们可以使用这个函数来提取每个图像的颜色和纹理特征。我们将创建两个列表,一个用于超声图像,另一个用于自然图像,并将每个图像的特征添加到相应的列表中。
```python
ultrasound_features = []
natural_features = []
target_size = (256, 256)
# Load ultrasound images
for file_name in os.listdir('D:/zzz/zus2'):
file_path = os.path.join('D:/zzz/zus2', file_name)
image = load_image(file_path, target_size)
features = extract_features(image)
ultrasound_features.append(features)
# Load natural images
for file_name in os.listdir('D:/zzz/zna2'):
file_path = os.path.join('D:/zzz/zna2', file_name)
image = load_image(file_path, target_size)
features = extract_features(image)
natural_features.append(features)
```
现在我们可以将这些特征用于比较两种图像类型之间的差异。我们将使用t检验来比较颜色和纹理特征的均值是否有显着差异。
```python
color_p_values = []
contrast_p_values = []
correlation_p_values = []
for i in range(len(ultrasound_features[0])):
ultrasound_values = [f[i] for f in ultrasound_features]
natural_values = [f[i] for f in natural_features]
t_stat, p_value = ttest_ind(ultrasound_values, natural_values)
if i < 3:
color_p_values.append(p_value)
elif i < 8:
contrast_p_values.append(p_value)
else:
correlation_p_values.append(p_value)
print('Color p-values:', color_p_values)
print('Contrast p-values:', contrast_p_values)
print('Correlation p-values:', correlation_p_values)
```
最后,我们可以将结果可视化以更好地理解差异。我们将使用条形图来显示每个特征的p值。
```python
labels = ['Mean (R)', 'Mean (G)', 'Mean (B)', 'Contrast (0)', 'Contrast (45)', 'Contrast (90)', 'Contrast (135)', 'Correlation (0)', 'Correlation (45)', 'Correlation (90)', 'Correlation (135)']
x = np.arange(len(labels))
width = 0.3
fig, ax = plt.subplots()
rects1 = ax.bar(x - width, color_p_values, width, label='Color')
rects2 = ax.bar(x, contrast_p_values, width, label='Contrast')
rects3 = ax.bar(x + width, correlation_p_values, width, label='Correlation')
ax.set_ylabel('p-value')
ax.set_xticks(x)
ax.set_xticklabels(labels, rotation=45, ha='right')
ax.legend()
fig.tight_layout()
plt.show()
```
这将显示一个条形图,其中每个条形表示一个特征,颜色表示特征的类型(颜色、对比度或相关性),高度表示p值。我们可以看到,与自然图像相比,超声图像在颜色和纹理特征方面显着不同。
完整的代码如下:
阅读全文