lena256色灰度图像的8位位平面分解,显示去掉第一个位平面的lean图像和第一个位平面,给出代码
时间: 2024-03-25 08:40:31 浏览: 221
以下是使用Python实现的代码:
```python
import cv2
import numpy as np
# 读取lena256图像
img = cv2.imread('lena256.jpg', cv2.IMREAD_GRAYSCALE)
# 将灰度图像转化为二进制图像
_, img_bin = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)
# 8位位平面分解
img_planes = cv2.split(img_bin)
# 去掉第一个位平面
img_planes[0] = np.zeros_like(img_planes[0])
# 合并位平面
img_merge = cv2.merge(img_planes)
# 显示去掉第一个位平面的lena256图像
cv2.imshow('lena256 without first bitplane', img_merge)
# 显示第一个位平面
cv2.imshow('first bitplane', img_planes[0])
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注:在上述代码中,假设lena256.jpg图像文件与代码文件在同一目录下。
相关问题
matlab将灰度图像Lena分解成8个位平面,并将数字水印信息嵌入Lena图像的第1至3个位平面中显示出来
好的,我来回答你的问题。首先,将灰度图像Lena分解成8个位平面可以使用MATLAB中的`bitget()`函数。具体实现代码如下:
```matlab
lena = imread('lena.png');
for i = 1:8
bitPlane{i} = bitget(lena, i);
end
```
其中`lena.png`是Lena图像的文件名,`bitPlane`是一个包含8个元素的cell数组,每个元素对应Lena图像的一个位平面。
接下来,将数字水印信息嵌入Lena图像的第1至3个位平面中可以使用以下代码:
```matlab
watermark = [1 0 1 0 1 1 0 1]; % 数字水印信息
for i = 1:3
bitPlane{i}(1:8) = bitset(bitPlane{i}(1:8), 1, watermark(i));
end
watermarkedLena = uint8(0);
for i = 1:8
watermarkedLena = watermarkedLena + bitPlane{i} .* 2^(i-1);
end
```
其中`watermark`是数字水印信息,这里假设水印信息只有3位。将数字水印信息嵌入到Lena图像的第1至3个位平面中,方法是将每个位平面的前8个像素的最低位替换成水印信息的对应位。最后将修改后的8个位平面合并成一个图像即可。
完整代码如下:
```matlab
lena = imread('lena.png');
for i = 1:8
bitPlane{i} = bitget(lena, i);
end
watermark = [1 0 1 0 1 1 0 1]; % 数字水印信息
for i = 1:3
bitPlane{i}(1:8) = bitset(bitPlane{i}(1:8), 1, watermark(i));
end
watermarkedLena = uint8(0);
for i = 1:8
watermarkedLena = watermarkedLena + bitPlane{i} .* 2^(i-1);
end
imshow(watermarkedLena);
```
运行以上代码,即可得到数字水印信息嵌入后的Lena图像。注意,为了方便起见,这里的水印信息是硬编码在代码中的,实际应用中应该根据具体需求生成水印信息。
将灰度图像Lena 分解成8个位平面,分别去掉从1到7个位平面,与剩余的位平面图像比较的源代码
以下是使用Python和OpenCV库实现将灰度图像Lena分解成8个位平面,并分别去掉从1到7个位平面,与剩余的位平面图像比较的源代码:
```python
import cv2
# 读取灰度图像Lena
img = cv2.imread('lena.png', cv2.IMREAD_GRAYSCALE)
# 将灰度图像分解成8个位平面
bits = [cv2.bitwise_and(img, 2**i) for i in range(8)]
# 分别去掉从1到7个位平面,与剩余的位平面图像比较
for i in range(1, 8):
removed_bits = bits[:i] + [0]*(8-i)
removed_img = cv2.merge(removed_bits)
remaining_bits = bits[i:]
remaining_img = cv2.merge(remaining_bits)
diff_img = cv2.absdiff(img, removed_img + remaining_img)
cv2.imshow(f'Removed {i} bits', removed_img)
cv2.imshow(f'Remaining {8-i} bits', remaining_img)
cv2.imshow(f'Difference with original', diff_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该代码首先使用`cv2.imread`函数读取灰度图像Lena,然后使用`cv2.bitwise_and`函数将灰度图像分解成8个位平面。接着,它使用循环逐个去掉从1到7个位平面,并分别显示剩余的位平面图像、被去掉的位平面图像和与原始图像的差异图像。最后,使用`cv2.imshow`函数显示这些图像,并使用`cv2.waitKey`函数等待用户按下任意键后关闭窗口。
注意:该代码是基于OpenCV 4.0.0版本编写的,如果您使用的是其他版本,可能需要进行适当的修改。
阅读全文