图像评价指标 信息熵的python代码
时间: 2023-06-16 18:07:35 浏览: 431
以下是使用Python计算图像评价指标中信息熵的示例代码:
```python
import numpy as np
from skimage import io
import math
def entropy(img):
# 计算图像的灰度直方图
histogram = np.histogram(img, bins=256, range=[0, 255])[0]
# 计算图像的像素总数
pixels = np.sum(histogram)
# 计算每个灰度级别的像素概率
probabilities = histogram / pixels
# 计算信息熵
entropy = -np.sum(probabilities * np.log2(probabilities))
return entropy
# 读取图像
img = io.imread('image.jpg', as_gray=True)
# 计算信息熵
img_entropy = entropy(img)
print('图像的信息熵为:', img_entropy)
```
在代码中,首先使用 `skimage` 库中的 `io.imread()` 函数读取图像,并将其转换为灰度图像。然后,使用 `numpy` 库中的 `np.histogram()` 函数计算图像的灰度直方图,并计算图像的像素总数。接下来,计算每个灰度级别的像素概率,并使用公式计算信息熵。最后,输出图像的信息熵值。
相关问题
图像融合评价指标代码python
### 图像融合评价指标的Python代码
对于图像融合效果的评估,通常采用多种定量度量标准来衡量融合后的图像质量。这些度量方法可以从不同角度反映融合算法的好坏,常见的包括均方误差(MSE),峰值信噪比(PSNR),结构相似性(SSIM)以及互信息(MI)[^1]。
下面提供了一组基于上述几种典型评价指标的Python实现:
#### 计算MSE (Mean Squared Error)
```python
import numpy as np
def mse(imageA, imageB):
err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
err /= float(imageA.shape[0] * imageA.shape[1])
return err
```
此函数计算两幅图片之间的平均平方差[MSE].
#### PSNR (Peak Signal-to-Noise Ratio)
```python
from math import log10, sqrt
def psnr(original, compressed):
mse_value = mse(original, compressed)
if mse_value == 0:
return 100
max_pixel = 255.0
psnr_value = 20 * log10(max_pixel / sqrt(mse_value))
return psnr_value
```
该部分实现了峰值信噪比的计算逻辑. 当输入图像完全相同时返回最大值100dB.
#### SSIM (Structural Similarity Index Measure)
为了更贴近人类视觉系统的感知特性,SSIM被广泛应用于图像质量评估中:
```python
from skimage.metrics import structural_similarity as ssim
def calculate_ssim(img1, img2):
score, diff = ssim(img1, img2, full=True)
return score
```
这里利用`skimage`库中的内置功能快速获取两张对比图间的结构性相似程度得分.
#### MI (Mutual Information)
互信息能够体现源图像间的信息共享水平,在多模态数据处理领域尤为重要:
```python
from sklearn.metrics import mutual_info_score
def mutual_information(hgram):
""" Mutual information for joint histogram"""
# Convert bins counts into probability values
pxy = hgram / float(np.sum(hgram))
px = np.sum(pxy, axis=1) # marginal for x over y
py = np.sum(pxy, axis=0) # marginal for y over x
px_py = px[:, None] * py[None,:] # Broadcast to multiply marginals
nzs = pxy > 0 # Only non-zero pxy values contribute to the sum
return np.sum(pxy[nzs] * np.log(pxy[nzs] / px_py[nzs]))
def calc_mi(imageA, imageB, num_bins=256):
hist_2d, _, _ = np.histogram2d(
imageA.ravel(),
imageB.ravel(),
bins=num_bins,
range=[[0, 256], [0, 256]]
)
mi = mutual_information(hist_2d)
return mi
```
通过构建联合直方图并应用熵理论公式得出两个随机变量之间存在的依赖关系强度.
图像融合评价指标EIpython代码
### 图像融合 EI 指标的 Python 实现
为了计算图像融合后的熵增量 (Entropy Increment, EI),可以通过比较原始图像和融合后图像的信息熵来衡量融合效果。信息熵是度量图像灰度分布复杂程度的一个统计特征参数,其定义如下:
\[ H(I) = -\sum_{i=0}^{L-1} p(i)\log_2(p(i)) \]
其中 \(p(i)\) 表示像素值为 i 出现的概率,\( L \) 是可能的灰度级数。
对于两幅源图像 \( I_1 \) 和 \( I_2 \), 以及它们对应的融合图像 \( F \),EI 可以通过下面的方式计算:
\[ EI = H(F) - \frac{H(I_1)+H(I_2)}{2} \]
如果 EI 值大于零,则说明融合过程增加了有用的信息;反之则表示减少了信息量。
下面是具体的 Python 实现代码,用于计算给定两张输入图片及其融合结果之间的 EI :
```python
import numpy as np
from skimage import io, color, exposure
def calculate_entropy(image):
hist, _ = np.histogram(image.flatten(), bins=range(256))
prob = hist / float(sum(hist))
# Avoid log of zero by adding a small epsilon value
entropy = -np.sum(prob * np.log2(prob + 1e-7))
return entropy
def compute_ei(img1_path, img2_path, fused_img_path):
img1_gray = color.rgb2gray(io.imread(img1_path))
img2_gray = color.rgb2gray(io.imread(img2_path))
fused_img_gray = color.rgb2gray(io.imread(fused_img_path))
h_fused = calculate_entropy((fused_img_gray*255).astype(np.uint8))
avg_h_source = (calculate_entropy((img1_gray*255).astype(np.uint8)) +
calculate_entropy((img2_gray*255).astype(np.uint8))) / 2
ei_value = h_fused - avg_h_source
return ei_value
if __name__ == "__main__":
path_to_image1 = "path/to/source/image1.png"
path_to_image2 = "path/to/source/image2.png"
path_to_fused_image = "path/to/fused/result.png"
ei_result = compute_ei(path_to_image1, path_to_image2, path_to_fused_image)
print("The Entropy Increment is:", ei_result)
```
这段脚本首先导入必要的库并定义了一个辅助函数 `calculate_entropy` 来计算单张图像的信息熵[^1]。接着实现了核心函数 `compute_ei`, 它接收三张图像路径作为参数——两个源图像和一张融合后的图像,并返回 EI 数值。最后,在主程序部分提供了测试用例,用户可以根据实际情况修改文件路径来进行实验。
阅读全文
相关推荐
















