图像匹配与识别.docx
《图像匹配与识别.docx》由会员分享,可在线阅读,更多相关《图像匹配与识别.docx(11页珍藏版)》请在冰豆网上搜索。
图像匹配与识别
甘肃政法学院
本科生实验报告
(五)
姓名:
学院:
专业:
班级:
实验课程名称:
数字图像处理技术
实验日期:
2016年月日
开课时间:
2015-2016学年第二学期
甘肃政法学院实验管理中心印制
实验题目
图像匹配与识别
图像Matlab数字水印设计
小组合作
姓名
班级
学号
一、实验目的
1、图像匹配与识别
2、图像Matlab数字水印设计
二.实验环境
Matlab7.0
三、实验内容与步骤
一、基于matlab做的数字水印,文件包括源代码及原图像和加入水印后的图像图像数字水印技术是指用信号处理的方法在图像数据中嵌入隐含标记,水印分为可感知和不易感知两种。
1、可感知水印。
这是一种可以看见的水印,就像插入或覆盖在图像上的标识。
它与可视纸上的水印相似,这类水印一般选用较淡或半透明图案。
它既可以证明作品的归属,又不妨碍对作品的欣赏,主要应用于标识那些可在图像数据库或Internet上得到的图像预览,防止这些图像被作为商业用途。
2、不易感知水印。
这是一种应用更加广泛的水印,主要用来鉴别产品的真伪及产权保护。
人们在感觉上的冗余是这种水印存在的前面与可视水印相反,它加在图像当中从表面上是不易察觉的。
由于数字产品都是为了满足感官需求,这就要求它的水印不可破坏其欣赏价值与使用价值,要求水印不引人注目。
虽然不易感知的数字水印不能阻止合法产品被非法复制,但是当发生版权纠纷时,所有者可以从中提取出标记,从而证明物品为某人所有。
二、图像匹配与识别
图像识别中的模式识别是一种从大量信息和数据出发,利用计算机和数学推理的方法对形状、模式、曲线、数字、字符格式和图形自动完成识别、评价的过程。
图形辨别是图像识别技术的一个重要分支,图形辨别指通过对图形的图像采用特定算法,从而辨别图形或者数字,通过特征点检测,精确定位特征点,通过将模板与图形或数字匹配,根据匹配结果进行辨别。
图像识别技术是人工智能的一个重要领域,人们提出了不同的图像识别模型。
例如模板匹配模型。
这种模型认为,识别某个图像,必须在过去的经验中有这个图像的记忆模式,又叫模板。
当前的刺激如果能与大脑中的模板相匹配,这个图像也就被识别了。
图像识别中的模式识别(PatternRecognition),是一种从大量信息和数据出发,在专家经验和已有认识的基础上,利用计算机和数学推理的方法对形状、模式、曲线、数字、字符格式和图形自动完成识别、评价的过程。
四、实验过程与分析
水印处理:
clearall;closeall;clc;
M=256;%原图像长度
N=64;%水印长度
[filename1,pathname]=uigetfile('*.*','selecttheimage');
image1=imread(num2str(filename1));
subplot(2,2,1);imshow(image1);title('originalimage');%orginalimageforwatermarking
image1=double(image1);
imagew=imread('dmg2.tif');
subplot(2,2,2);imshow(imagew);title('originalwatermark');%originalwatermark
%嵌入水印
[ca,ch,cv,cd]=dwt2(image1,'db1');
[cas,chs,cvs,cds]=dwt2(ca,'db1');
fori=1:
N
forj=1:
N
ifimagew(i,j)==0
a=-1;
else
a=1;
end
Ca(i,j)=cas(i,j)*(1+a*0.03);
end
end
IM=idwt2(Ca,chs,cvs,cds,'db1');
markedimage=double(idwt2(IM,ch,cv,cd,'db1'));
%显示嵌入后水印图像
subplot(2,2,3);colormap(gray(256));image(markedimage);title('markedimage');
imwrite(markedimage,gray(256),'watermarked.bmp','bmp');
%提取水印
image1=imread(num2str(filename1));image1=double(image1);
imaged=imread('watermarked.bmp');
[ca,ch,cv,cd]=dwt2(image1,'db1');
[cas,chs,cvs,cds]=dwt2(ca,'db1');
[caa,chh,cvv,cdd]=dwt2(imaged,'db1');
[caas,chhs,cvvs,cdds]=dwt2(caa,'db1');
forp=1:
N
forq=1:
N
a=caas(p,q)/cas(p,q)-1;
ifa<0
W(p,q)=0;
else
W(p,q)=255;
end
end
end
%显示提取的水印
subplot(2,2,4);
colormap(gray(256));image(W);title('从含水印图像中提取的水印');
imwrite(W,gray(256),'watermark.bmp','bmp');
显示图像的傅立叶变换FFT及逆变换IFFT。
I=imread('lena.bmp');
subplot(1,3,1),imshow(uint8(I));%显示原始图像
J=fft2(I);%图像FFT变换
B=fftshift(J);%显示FFT变换结果
subplot(1,3,2),
imshow(log(abs(B)),[]);
H=ifft2(J);%使用逆变换复原图像并显示结果
subplot(1,3,3),
imshow(uint8(H));
计算并显示图像的离散余弦变换DCT及逆变换IDCT。
程序代码如下:
I=imread('lena.bmp');
subplot(1,4,1),imshow(uint8(I);)%显示原始图像
J=dct2(I);%图像DCT变换
K=idct2(J);subplot(1,4,2),imshow(uint8(K));%使用逆变换复原图像
J(abs(J)<10)=0;%将较小的系数设置为0
M=idct2(J);subplot(1,4,3),imshow(uint8(M));%使用逆变换部分复原图像
J(abs(J)<100)=0;%将较小的系数设置为0
N=idct2(J);subplot(1,4,4),imshow(uint8(N));%使用逆变换部分复原图像
二值图像匹配
m=imread(filepath);%读取原图
figure,imshow(im,[]);title('Raw');%显示原图
im=im2bw(im);%转二值图像
figure,imshow(im,[]),title('BW');%显示二值图像
im2=imfill(im,'holes');%填充
im3=bwperim(im2);%轮廓提取
figure,imshow(im2,[]);title('')%显示
figure,imshow(im3,[]);
图像识别:
clear;clc;
reference_img=imread('optical1.tif');%提取原始图片作为基准
target_img=imread('optical2.tif');%要求进行匹配的图像
subplot(2,3,1);%显示原始图像
imshow(reference_img);
title('原始图像');
subplot(2,3,2);%显示进行匹配的图像
imshow(target_img);
title('目标图像');
[Ix,Iy]=size(target_img);%取出图片大小
x=[160,103,102,209];%自己选定的特征点
y=[116,246,160,299];
u=[87,35,34,141];
v=[21,151,66,204];
Px=polyfit(x,u,1);%映射函数求解
Py=polyfit(y,v,1);
fori=1:
Ix
forj=1:
Iy
m=i*Px(1,1)+Px(1,2);%映射函数
n=j*Py(1,1)+Py(1,2);
m_integer=floor(m);%对映射值进行取整
n_integer=floor(n);
m_decimal=m-m_integer;%对映射值取小数
n_decimal=n-n_integer;
if(ge(m_integer,Ix)||ge(n_integer,Iy)||lt(m_integer,0)||lt(n_integer,0)||m_integer==0||n_integer==0)%判断映射点是否满足条件
result_img(i,j)=0;
result_img3(i,j)=0;
else
result_img(i,j)=target_img(m_integer,n_integer);%没有进行插值
result_img3(i,j)=(1-m_decimal)*(n_decimal*target_img(m_integer,n_integer+1)+(1-n_decimal)*target_img(m_integer,n_integer))+m_decimal*(n_decimal*target_img(m_integer+1,n_integer+1)+(1-n_decimal)*target_img(m_integer+1,n_integer));%双线性插值
end
ifresult_img(i,j)==0%把没有进行插值图像和原始图像进行组合
result_img2(i,j)=reference_img(i,j);
else
result_img2(i,j)=result_img(i,j);
end
ifresult_img3(i,j)==0%把插值后图像和原始图像进行组合
result_img4(i,j)=reference_img(i,j);
else
result_img4(i,j)=result_img3(i,j);
end
end
end
subplot(2,3,3);%显示未插值图像匹配
imshow(result_img,[]);
title('未插值图像匹配');
subplot(2,3,4);%显示未插值图像匹配组合
imshow(result_img2,[]);
title('未插值图像匹配组合')
subplot(2,3,5);%显示双线性插值后图像匹配
imshow(result_img3,[]);
title('双线性插值后图像匹配');
subplot(2,3,6);%显示双线性插值后图像匹配组合
imshow(result_img4,[]);
title('双线性插值后图像匹配组合');
五、实验总结
通过实例分析了利用MATLAB实现数字水印系统所涉及的主要技术。
需要注意的是,最主要的不是让掌握数字水印的嵌入和提取方法,而是借助这一实例让掌握如何利用MATLAB实现数字图像处理的相关算法,从而加深对数字图像处理技术的理解。
图像的模式识别对数字图像处理技术要求较高,不同的模式识别用不同的算法函数,程序代码。