1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Matlab-图像处理及数字水印生成

Matlab-图像处理及数字水印生成

时间:2020-06-28 06:18:58

相关推荐

Matlab-图像处理及数字水印生成

一、图像基本操作

图像读取及显示1.一般图像读取:x=imread('filename','permission'),permission 图像存储类型。例如:x=imread('lena.bmp'); 或者x=imread('lena','bmp'); 2.一般图像显示:imshow(x); 3.索引图像读取:[data,map]=imread('filename','permission'); 例如:[data,map]=imread('lena','bmp'); 4.索引图像显示:image(data),colormap(map); 5.图像分区显示:subplot(mnl); imshow(x); m:行数,n:列数,l:第 l 个区域显示。 subplot(221),imshow(gray_to_binary1),title('Threshold=0.5'); subplot(222),imshow(gray_to_binary2),title('Threshold=0.4'); subplot(223),imshow(gray_to_binary3),title('Threshold=0.7'); subplot(224),imshow(gray_to_binary4),title('Threshold=0.2');

图像写入

1.一般图像写入:imwrite(x,'filename','permission');permission图像存储类型,例如:imwrite(x,'lena22.bmp','bmp');

2.索引图像写入:imwrite(data,map,'filename','permission);例如:imwrite(data,map,'woman22.bmp','bmp');

图像数据存储及加载

可以将现有变量存储为数据文件格式,利用 load函数命令,进行数据加载。‘save x ;’存储变量 x 为 x.mat 格式数据文件,数据变量与数据文件名称相同;‘load a.mat ;’加载 a.mat 数据文件,生成数据变量 a,数据文件与数据变量名称相同。

图像格式转换

1.将灰度图像根据不用阈值转换为二值图像

gray=imread('rgb_to_gray.bmp');

gray_to_binary1=im2bw(gray,0.5);

gray_to_binary2=im2bw(gray,0.4);

gray_to_binary3=im2bw(gray,0.7);

gray_to_binary4=im2bw(gray,0.2);

2.将彩色图像转换为灰度图像

rgb=imread('lena_rgb.bmp');

rgb_to_gray=rgb2gray(rgb);

灰度图像直方图显示

灰度图像的直方图事是图像的亮度分布的概率密度函数,是一幅图像的所有象素集合的最基本的统计规律,它反映的是图像的灰度值的分布情况。‘imhist(gray);’将原图像 I 直方图显示‘imhist(gray,4);’将原图像 I 直方图显示为 n 级灰度。

图像加减运算-两幅图像加减运算,必须保证图像大小一致

1.图像相加运算(imadd)

a) 完成两幅图像的相加运算。例如:‘testadd=imadd(gray,y);’ 要求 x 与 y 矩阵大小一致

b) 彩色图像 RGB 分通道显示,选定某一通道进行单通道颜色加强(图像数据矩阵与常数相加)。

rgb_r=rgb(:,:,1);

rgb_g=rgb(:,:,2);

rgb_b=rgb(:,:,3);

rgb_b_add=rgb_b+88;

new_rgb(:,:,1)=rgb_r;

new_rgb(:,:,2)=rgb_g;

new_rgb(:,:,3)=rgb_b_add;

2.图像相减运算(imsubtract)

a) 完成两幅图像的相减运算。例如:‘testsub=imsubtract(gray,y);’要求 x 与 y 矩阵大小一致

b) 将图像数据减去一个常数。例如:‘gray_sub=gray-44;’

图像几何变换

1.图像的插值缩放

a) 最近邻插值:输出像素的赋值为当前点的像素点。

b)双线性插值:输出像素的赋值为 2×2 矩阵所包含的有效点的加权平均值。

c) 双三次插值:输出像素的赋值为 4×4 矩阵所包含的有效点的加权平均值。

y1=imresize(y,1.5,'nearest'); %利用最近邻插值方法将 I 放大 1.5倍

y2=imresize(y,1.5,'bilinear'); %利用双线性插值方法将 I 放大 1.5倍

y3=imresize(y,1.5,'bicubic'); %利用双三次插值方法将 I 放大 1.5 倍

2.插值旋转

gray1=imrotate(gray,30,'nearest') % 利用最近邻插值方法将 I 逆时针旋转 30 度

gray2=imrotate(gray,30,'bilinear','crop') % 利用双线性插值方法将 I 逆时针旋转 30 度,大小保持不变。

3.图像的剪切

gray3=imcrop(gray,[40,50,200,200]); %给定大小剪切,前切起始位置为(40,50),大小为200*200

gray4=imcrop(gray); %利用鼠标交互对图像进行剪切

图像拼接-水平拼接,要求两幅图像行数相同;垂直拼接,要求两幅图像列数相同

‘gray22=cat(2,gray,gray);’实现图像的水平拼接、垂直拼接,A1 和 A2 为读入的图像矩阵。

二、数字水印生成

生成伪随机数

‘rand('state',0); ’生成伪随机数种子,‘r=rand(m,n); ’生成m行n列的0-1区间的伪随机数,将伪随机数二值化时,建议设定阈值(0.5),将伪随机数转化为0和1。

%灰度图像二值化

gray_to_binary_w=im2bw(w);

imshow(gray_to_binary_w);

rand('state',0);%随机数初值为1

r=rand(512,512);%生成512*512的随机数矩阵

%伪随机数矩阵二值化

r(r<0.5)=0;

r(r>0.5)=1;

读入水印图像

a) 读入灰度图像,并将其二值化。

b) 直接读入二值水印图像

水印图像与伪随机数调制-水印加密

‘z=xor(gray_to_binary_w,r);’,w为二值水印图像,x为伪随机数,z为加密后的二值水印图像,xor为异或运算。

加密后水印图像解密

通过判断加密后的水印图像与伪随机数的异同,判断原始水印数据。

%解密

w1=xor(z,r);

imshow(w1);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。