用python实现基于概率分布的超声图像与自然图像性质差异分析,超声图像的文件路径是D:\zzz\na5,自然图像的文件路径是D:\zzz\us5,两种图像都有778张,请注意每张图像的长和宽不都一样需要调整,需要先进行归一化处理,需要比较大量数据确保结果的正确性,需要判断超声图像与自然图像的像素值分布是否存在显著差异,需要统计所有结果进行差异性检验和分析,需要可视化使结果尽量明显
时间: 2023-12-17 13:02:51 浏览: 44
基于python实现的使用Keras 库构建用于超声图像神经分割的深度神经网络程序源码.zip
首先,我们需要导入需要的库,包括numpy、cv2、matplotlib和scipy等库。
```python
import os
import numpy as np
import cv2
import matplotlib.pyplot as plt
from scipy.stats import ks_2samp
```
然后,我们需要定义一个函数来加载图像并进行归一化处理。
```python
def load_image(path):
img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (256, 256))
img = img / 255.0
return img
```
接下来,我们可以定义一个函数来计算图像的像素值分布。
```python
def calc_distribution(img):
hist, _ = np.histogram(img, bins=256, range=(0, 1))
return hist / float(img.size)
```
然后,我们可以使用上述函数来计算超声图像和自然图像的像素值分布,并将结果可视化。
```python
us_path = r'D:\zzz\us5'
na_path = r'D:\zzz\na5'
us_dists = []
na_dists = []
for filename in os.listdir(us_path):
if filename.endswith('.bmp'):
us_img = load_image(os.path.join(us_path, filename))
us_dists.append(calc_distribution(us_img))
for filename in os.listdir(na_path):
if filename.endswith('.bmp'):
na_img = load_image(os.path.join(na_path, filename))
na_dists.append(calc_distribution(na_img))
us_dists = np.array(us_dists)
na_dists = np.array(na_dists)
fig, ax = plt.subplots()
ax.plot(np.arange(256) / 256.0, np.mean(us_dists, axis=0), color='blue', label='US')
ax.plot(np.arange(256) / 256.0, np.mean(na_dists, axis=0), color='red', label='NA')
ax.legend()
ax.set_xlabel('Pixel Value')
ax.set_ylabel('Normalized Frequency')
plt.show()
```
接下来,我们可以使用Kolmogorov-Smirnov检验来检查超声图像和自然图像的像素值分布是否存在显著差异。
```python
ks_results = []
for i in range(256):
_, p = ks_2samp(us_dists[:, i], na_dists[:, i])
ks_results.append(p)
fig, ax = plt.subplots()
ax.plot(np.arange(256) / 256.0, ks_results, color='blue')
ax.axhline(y=0.05, color='red', linestyle='--')
ax.set_xlabel('Pixel Value')
ax.set_ylabel('p-value')
plt.show()
```
最后,我们可以根据Kolmogorov-Smirnov检验的结果来绘制超声图像和自然图像的像素值分布差异图。
```python
diffs = np.abs(np.mean(us_dists, axis=0) - np.mean(na_dists, axis=0))
fig, ax = plt.subplots()
ax.plot(np.arange(256) / 256.0, diffs, color='blue')
ax.axhline(y=0.05, color='red', linestyle='--')
ax.set_xlabel('Pixel Value')
ax.set_ylabel('Absolute Difference')
plt.show()
```
阅读全文