数字水印实验1 用于数字图像处理的MATLAB基础知识

【实验名称】用于数字图像处理的MATLAB基础知识   

 

【实验目的】

1、学习并掌握MATLAB的基本语法和操作

2、学习用于数字图像处理的MATLAB基础知识

 

【实验原理】

1、图像的读取A=imread(FILENAME,FMT)

2、图像的写入imwrite(A,FILENAME,FMT)

3、图像的显示imshow(I,[low high])

figure;%创建一个新的窗口

figure;subplot(m,n,p);imshow(I);

 

【实验内容】

1、打开MATLAB

2、读取图像(灰度I1、彩色I2),观察图像读取后的数据。

代码:

function ModifyI5()
clc;
%读取灰度图像(I1)和彩色图像(I2)
I1=imread('coverlena.bmp');
I2=imread('EMDstegoimg.bmp');
%由于彩色图像过大,不能直接打开
%将其按RGB三通道分开,便于观察
I2_R=I2(:,:,1);
I2_G=I2(:,:,2);
I2_B=I2(:,:,3);
End

结果:

灰度图像I1部分数据

数字水印实验1 用于数字图像处理的MATLAB基础知识_第1张图片

彩色图像I2的R通道的部分数据:

数字水印实验1 用于数字图像处理的MATLAB基础知识_第2张图片

 

3、在灰度图像中间剪切掉一块方形区域,自定义大小。

代码:

function ModifyI()
clc;
I=imread('coverlena.bmp');
[long,width]=size(I);
%希望截取的边长,截取部分为图像正中心的以limit为边长的区域
limit=100;
%将选定区域截取并保存
i=I((long-limit)/2:(long+limit)/2,(width-limit)/2:(width+limit)/2);
%将原图截取的区域置为白色
I((long-limit)/2:(long+limit)/2,(width-limit)/2:(width+limit)/2)=255;
%绘图并保存为新图片
figure;imshow(I);imwrite(I,'new1-1.bmp');
figure;imshow(i);imwrite(i,'new1-2.bmp');
end

 

结果:

数字水印实验1 用于数字图像处理的MATLAB基础知识_第3张图片                    数字水印实验1 用于数字图像处理的MATLAB基础知识_第4张图片 

                     截取后图像                                         截取的区域

 

4、在彩色图像中间剪切掉一块方形区域,自定义大小。

代码:

function ModifyI()
I=imread('EMDstegoimg.bmp');[long,width,~]=size(I);
%希望截取的边长,截取部分为图像正中心的以limit为边长的区域
limit=100;
%将选定区域截取并保存
i(:,:,1)=I((long-limit)/2:(long+limit)/2,(width-limit)/2:(width+limit)/2,1);
i(:,:,2)=I((long-limit)/2:(long+limit)/2,(width-limit)/2:(width+limit)/2,2);
i(:,:,3)=I((long-limit)/2:(long+limit)/2,(width-limit)/2:(width+limit)/2,3);
%将原图截取的区域置为红色
I((long-limit)/2:(long+limit)/2,(width-limit)/2:(width+limit)/2,1)=255;
I((long-limit)/2:(long+limit)/2,(width-limit)/2:(width+limit)/2,2)=0;
I((long-limit)/2:(long+limit)/2,(width-limit)/2:(width+limit)/2,3)=0;
%绘图并保存为新图片
figure;imshow(I);imwrite(I,'new2-1.bmp');
figure;imshow(i);imwrite(i,'new2-2.bmp');
end

结果:

数字水印实验1 用于数字图像处理的MATLAB基础知识_第5张图片                 数字水印实验1 用于数字图像处理的MATLAB基础知识_第6张图片

                                            截取后图像                                                                         截取的区域

 

5、再继续读取一幅图像I3,裁剪合适大小,填充到刚才中间剪切掉的灰度和彩色图像中。

代码:

function ModifyI()
clc;
%读取两张已经被截取过的图片和一张新灰度图片
I1=imread('new1-1.bmp');
I2=imread('new2-1.bmp');
I3=imread('qrcode.bmp');
[long1,width1]=size(I1);
[long2,width2,~]=size(I2);
[long3,width3]=size(I3);
%希望截取的边长,截取部分为图像正中心的以limit为边长的区域
limit=100;
%用新灰度图像填充灰度图像I1
I1((long1-limit)/2:(long1+limit)/2,(width1-limit)/2:(width1+limit)/2)=...
    I3((long3-limit)/2:(long3+limit)/2,(width3-limit)/2:(width3+limit)/2);
%用新灰度图像填充彩色图像I2
I2((long2-limit)/2:(long2+limit)/2,(width2-limit)/2:(width2+limit)/2,1)=...
    I3((long3-limit)/2:(long3+limit)/2,(width3-limit)/2:(width3+limit)/2);
I2((long2-limit)/2:(long2+limit)/2,(width2-limit)/2:(width2+limit)/2,2)=...
    I3((long3-limit)/2:(long3+limit)/2,(width3-limit)/2:(width3+limit)/2);
I2((long2-limit)/2:(long2+limit)/2,(width2-limit)/2:(width2+limit)/2,3)=...
    I3((long3-limit)/2:(long3+limit)/2,(width3-limit)/2:(width3+limit)/2);
%绘图并保存为新图片
figure;imshow(I1);imwrite(I1,'new1.bmp');
figure;imshow(I2);imwrite(I2,'new2.bmp');
end

结果:

数字水印实验1 用于数字图像处理的MATLAB基础知识_第7张图片数字水印实验1 用于数字图像处理的MATLAB基础知识_第8张图片 

              填充后的灰度图片                            填充后的彩色图片

 

【小结或讨论】

图像的读取(imread)、显示(imshow)、保存(imwrite);

如何彩色图像I的大小(行、列、维数)[Am,An,Az]=size(I);

如何提取彩色图像I的RGB通道像素值

I1=I(:,:,1);I2=I(:,:,2);I3=I(:,:,2)

如何将三个通道数据合并成一个三维矩阵

A(:,:,1)=A1;A(:,:,2)=A2;A(:,:,3)=A3

通过这次实验,我还学习了很多关于图像的基础知识。比如在观察灰度、彩色和黑白图片通道数据时,灰度图像只有一个通道,而彩色图像有RGB三个通道,如果给三个通道都赋一样的值,那么和一个通道的效果是一样的。而且要注意到灰度图像和黑白图像是不同的,黑白图像的数据只有0或255,而灰度图像的数据是在0至255之间,两者的共同点是都只有一个通道,这与彩色图像有着明显区别。。

你可能感兴趣的:(数字水印,信息安全,数字水印,信息隐藏)