计算图像的自信息和信息熵,需包含下述步骤: (1) 读入一幅图像 (2) 计算图中每个灰度级的频数、频率 (3) 从频率出发计算该图像的自信息、信息熵 (4) 可视化显示原图、灰度级频数、自信息和信息熵 的实验环境和调试过程
时间: 2023-12-14 13:37:56 浏览: 79
图像信息熵计算
实验环境:
- Python 3.x
- NumPy
- Matplotlib
- OpenCV
步骤:
1. 读入一幅图像
首先,我们需要使用OpenCV读入一幅图像,然后转换为灰度图像。这可以通过以下代码实现:
```python
import cv2
img = cv2.imread('image.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
2. 计算图中每个灰度级的频数、频率
我们可以使用NumPy中的bincount函数来计算每个灰度级的频数。然后,我们可以将频数除以像素总数来得到频率。以下是代码示例:
```python
import numpy as np
hist = np.bincount(gray_img.flatten(), minlength=256)
freq = hist / np.sum(hist)
```
3. 从频率出发计算该图像的自信息、信息熵
自信息的计算公式为:
$I(x) = -\log_2(p(x))$
信息熵的计算公式为:
$H(X) = -\sum_{i=0}^{255} p(x_i) \log_2(p(x_i))$
以下是代码示例:
```python
eps = np.finfo(float).eps # 避免 log(0) 的情况
inf = np.zeros_like(freq)
inf[freq != 0] = -np.log2(freq[freq != 0])
entropy = -np.sum(freq * inf)
```
4. 可视化显示原图、灰度级频数、自信息和信息熵
最后,我们可以使用Matplotlib来可视化显示原图、灰度级频数、自信息和信息熵。以下是代码示例:
```python
import matplotlib.pyplot as plt
plt.subplot(2, 2, 1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.subplot(2, 2, 2)
plt.bar(np.arange(256), hist)
plt.title('Gray Level Histogram')
plt.subplot(2, 2, 3)
plt.imshow(inf[gray_img], cmap='gray')
plt.title('Self Information')
plt.subplot(2, 2, 4)
plt.text(0.5, 0.5, 'Entropy: {:.2f} bits/pixel'.format(entropy),
horizontalalignment='center', verticalalignment='center',
fontsize=16)
plt.axis('off')
plt.show()
```
完整代码如下:
阅读全文