python图像信息隐藏卡方分析绘制statistic图像和p值图像
时间: 2024-01-17 19:05:57 浏览: 110
要进行图像信息隐藏的卡方分析并绘制statistic图像和p值图像,可以按照以下步骤操作:
1. 导入必要的库和模块,如numpy、cv2、scipy.stats等。
```python
import numpy as np
import cv2
from scipy.stats import chi2_contingency
```
2. 读取图像并将其转换为灰度图像。然后将其转换为二进制形式,以便进行信息隐藏。
```python
img = cv2.imread('image.png')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
binary_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)[1]
```
3. 定义信息隐藏函数,将信息嵌入到二进制图像中。这里采用的是最简单的LSB(最低有效位)算法。
```python
def hide_data(binary_img, data):
data_len = len(data)
data_index = 0
for i in range(binary_img.shape[0]):
for j in range(binary_img.shape[1]):
if data_index >= data_len:
return binary_img
binary_img[i][j] = (binary_img[i][j] & 254) | int(data[data_index])
data_index += 1
return binary_img
```
4. 调用hide_data函数将信息嵌入到二进制图像中。
```python
data = 'Hello, world!'
binary_img_with_data = hide_data(binary_img, ''.join(format(ord(c), '08b') for c in data))
```
5. 计算卡方值、p值和自由度,并绘制statistic图像和p值图像。
```python
def analyze_data(binary_img, binary_img_with_data):
# 计算直方图
hist, bins = np.histogram(binary_img.flatten(), 2, [0, 256])
hist_with_data, bins_with_data = np.histogram(binary_img_with_data.flatten(), 2, [0, 256])
# 计算卡方值、p值和自由度
chi2, p, dof, expected = chi2_contingency([hist, hist_with_data])
print('卡方值:', chi2)
print('p值:', p)
print('自由度:', dof)
# 绘制statistic图像和p值图像
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 2, figsize=(12, 6))
ax[0].bar(['Original', 'Modified'], [hist[0], hist_with_data[0]])
ax[0].set_xlabel('Pixel value')
ax[0].set_ylabel('Frequency')
ax[0].set_title('Statistic')
ax[1].bar(['Original vs. Modified'], [p])
ax[1].set_ylim(0, 1)
ax[1].set_xlabel('Comparison')
ax[1].set_ylabel('p-value')
ax[1].set_title('p-value')
plt.show()
analyze_data(binary_img, binary_img_with_data)
```
这样就可以进行图像信息隐藏的卡方分析并绘制statistic图像和p值图像了。
阅读全文