BW3(:,[403:804]) = 1; figure(1); subplot(2,4,5); imshow(BW3); title('取一半')
时间: 2023-11-17 13:05:35 浏览: 38
这段代码是对图像进行处理的。首先,将BW3的第403列到第804列全部设为1,相当于将原图像的左半边全部变为白色。接着,使用subplot函数将图像显示在figure(1)的第5个位置。subplot(2,4,5)的意思是将figure(1)划分为2行4列的网格,然后将当前的图像放在第5个格子里。最后,使用imshow函数将处理后的图像显示出来,并设置标题为“取一半”。整个过程的目的可能是为了将左半边的图像去除以便进行后续的处理,或者是为了显示图像处理的效果。
相关问题
bw=zeros(9,9); bw(3:5,4:6)=1; se=strel('square',3); bw2=imerode(bw,se); figure; subplot(1,2,1);imshow(bw); subplot(1,2,2);imshow(bw2);分析一下这段代码以及结果
这段代码主要是用来进行形态学腐蚀操作的,具体如下:
1. 创建一个9x9的全零矩阵 `bw`。
2. 将矩阵 `bw` 中第3行到第5行、第4列到第6列的区域赋值为1,即在 `bw` 中创建一个3x3的白色小方块。
3. 创建一个3x3的正方形结构元素 `se`。
4. 使用 `imerode` 函数对 `bw` 进行腐蚀操作,其中第一个参数是需要进行腐蚀的图像,第二个参数是腐蚀所使用的结构元素。
5. 将腐蚀前后的图像分别在两个子图中进行显示。
结果显示了腐蚀前后的图像,其中腐蚀后的图像 `bw2` 比原图 `bw` 中的小方块更小,这是因为腐蚀操作会使图像中的白色区域缩小。该操作可以用于去除图像中的噪声或者分离相邻物体。
Im = imread('szy1.jpg'); In = rgb2gray(Im); I1 = bitget(In, 1); one = I1(1:200,1:200); one = im2bw(uint8(one) * 255); figure; subplot(2,3,3) imshow(one); title('第一层图像'); I = In - (min(In(:))); [M,N] = size(I); subplot(2,3,1) imshow(I); title('载体图像'); message=imread('watermark.bmp');[Mw,Nw]=size(message); subplot(2,3,2) imshow(message);title('原始水印'); embed=I; for i=1:Mw for j=1:Nw embed(i,j)=embed(i,j)-mod(embed(i,j),2)+uint8(message(i,j)); end end subplot(2,3,4) imshow(embed);title('含水印图像');drawnow; imwrite(embed,'ok.bmp') I = imread('ok.bmp'); I0 = bitget(I, 1); waterMark = I0(1:32,1:32); waterMark = im2bw(uint8(waterMark) * 255); subplot(2,3,5) imshow(waterMark); title('提取图像'); waterMark = I0(1:200,1:200); waterMark = im2bw(uint8(waterMark) * 255); subplot(2,3,6) imshow(waterMark); title('第一层加水印图像');计算含水印图像的 PSNR;计算提取水印的 NC和BER
计算含水印图像的PSNR:
```matlab
Im = imread('szy1.jpg');
In = rgb2gray(Im);
I1 = bitget(In, 1);
one = I1(1:200,1:200);
one = im2bw(uint8(one) * 255);
I = In - (min(In(:)));
message = imread('watermark.bmp');
[Mw,Nw]=size(message);
embed=I;
for i=1:Mw
for j=1:Nw
embed(i,j)=embed(i,j)-mod(embed(i,j),2)+uint8(message(i,j));
end
end
imwrite(embed,'ok.bmp')
I = imread('ok.bmp');
[M, N] = size(I);
MSE = sum(sum((I - embed).^2)) / (M * N);
PSNR = 10 * log10(255^2 / MSE)
```
计算提取水印的NC:
```matlab
waterMark = I0(1:32,1:32);
waterMark = im2bw(uint8(waterMark) * 255);
NC = sum(sum(waterMark == message)) / (32 * 32)
```
计算提取水印的BER:
```matlab
waterMark = I0(1:200,1:200);
waterMark = im2bw(uint8(waterMark) * 255);
BER = sum(sum(waterMark ~= one)) / (200 * 200)
```
需要注意的是,上述代码中的变量`I0`没有给出,需要根据实际情况进行修改,以便能够正确运行。