自信息和信息熵的计算方法,需要自行编码实现,不能直接调用第三方软件包。可编写为相应函数,供以后实验再次使用。代码中需包含适量注释,说明求解思路和过程。 1. 计算图像的自信息和信息熵,需包含下述步骤: (1)读入一幅图像 (2)计算图中每个灰度级的频数、频率 (3)从频率出发计算该图像的自信息、信息熵 (4)可视化显示原图、灰度级频数、自信息和信息熵
时间: 2024-03-13 19:42:36 浏览: 158
好的,以下是基于Python的代码实现,用于计算图像的自信息和信息熵,并可视化显示。注释中有详细的求解思路和过程说明。
```
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
# 读入一幅图像
img = Image.open('image.jpg')
img_arr = np.array(img)
height, width = img_arr.shape
# 计算图中每个灰度级的频数、频率
freq = np.zeros(256)
for i in range(height):
for j in range(width):
pixel = img_arr[i,j]
gray = int(0.299*pixel[0] + 0.587*pixel[1] + 0.114*pixel[2])
freq[gray] += 1
freq /= (height*width)
# 从频率出发计算该图像的自信息、信息熵
self_info = np.zeros(256)
for i in range(256):
if freq[i] > 0:
self_info[i] = -np.log2(freq[i])
entropy = -np.sum(freq*np.log2(freq))
# 可视化显示原图、灰度级频数、自信息和信息熵
fig, axs = plt.subplots(2, 2, figsize=(10,10))
axs[0,0].imshow(img_arr)
axs[0,0].set_title('Original Image')
axs[0,1].bar(range(256), freq)
axs[0,1].set_title('Gray Level Frequency')
axs[1,0].bar(range(256), self_info)
axs[1,0].set_title('Self Information')
axs[1,1].text(0.5, 0.5, 'Entropy = {:.2f}'.format(entropy), fontsize=20)
axs[1,1].axis('off')
axs[1,1].set_title('Entropy')
plt.show()
```
阅读全文