‘壹’ Matlab GUI界面设计,通过选用不同算法,可以对图像进行加密,怎么实现代码如何编写
用button group 然后返回值是1/2/3/4.。。。然后就是switch case
‘贰’ 几种简单的图像加密方法
给图片文件加密有3种方法:
1 用系统自带的EFS加密,但要注意备份加密证书,另外在加密帐号下是看不到加密效果的。
2 用winrar的压缩加密,但速度慢,操作麻烦。
3 用超级加密3000加密文件,超级加密3000采用先进的加密算法,使你的文件加密后,真正的达到超高的加密强度,让你的加密文件无懈可击,没有密码无法解密。
您可以根据自己的实际需求选择一款属于自己的文件加密方法。
‘叁’ matlab中如何利用参数调制实现图像加密解
基于Arnold变换的图像加密: 记住把注释掉的程序单独写个M文件,放在同一路径下
clc;clear;close all;
randoma=input('请输入用户指令:','s');%
P=randoma;
%P=str2num(P);
if (P=='*****')
tu=uigetfile();
I=imread(tu);
imshow(tu);hold on;
%imshow('tu');
[M,N,P]=size(I);
rand('state',0);
% randoma=input('请输入用户指令:');%
% P=randoma;
% if (P==3.14)
T=96;
R=rand(M,N)*pi*2;
xlswrite('R.xls',R);
%kk=xlsread('jjm.xls');%32 43 55 63
a1=input('请输入a1:');
a2=input('请输入a2:');
a3=input('请输入a3:');
a4=input('请输入a4:');
kk=[a1,a2,a3,a4];
xlswrite('kk.xls',kk);
%%
I=double(I);
Ie=encrypt(I,R,kk);
figure;
imshow(Ie,[]);
%%
%%加密图像 其中调用了encrypt函数
%function Ie=encrypt(I,R,kk);
%Ir=I(:,:,1);Ig=I(:,:,2);Ib=I(:,:,3);
% [Xr,Xg,Xb]=Tmatrix(Ir,Ig,Ib,R);
% I1r=blkart2a(Xr,kk);I1g=blkart2a(Xg,kk);I1b=blkart2a(Xb,kk);
% I0r=dct2(I1r);I0g=dct2(I1g);I0b=dct2(I1b);
% [X1r,X1g,X1b]=Tmatrix(I0r,I0g,I0b,R);
% I2r=blkart2a(X1r,kk);I2g=blkart2a(X1g,kk);I2b=blkart2a(X1b,kk);
% I3r=idct2(I2r);I3g=idct2(I2g);I3b=idct2(I2b);
% Ie(:,:,1)=I3r;Ie(:,:,2)=I3g;Ie(:,:,3)=I3b;
% [Xr,Xg,Xb]=Tmatrix(Ir,Ig,Ib,R);
% Xr=Ir.*cos(R)+Ig.*sin(R).^2-Ib.*sin(R).*cos(R);
% Xg=-Ir.*sin(R)+Ig.*sin(R).*cos(R)-Ib.*cos(R).^2;
% Xb=Ig.*cos(R)+Ib.*sin(R);
a1=input('请输入a1:');
a2=input('请输入a2:');
a3=input('请输入a3:');
a4=input('请输入a4:');
kk=[a1,a2,a3,a4];
R=uigetfile();
R=xlsread('R.xls');
%%
Ii=decrypt(Ie,R,kk);
Ii=Ii-min(Ii(:));Ii=Ii/max(Ii(:));
h = waitbar(0,'Please wait...');
steps = 600;
for step = 1:steps
%figure;imshow(Ii,[]);
waitbar(step / steps)
end
close(h)
figure;imshow(Ii,[]);
h = waitbar(1,'完成解密','color','');
steps = 1;
for step = 1:steps
h = waitbar(1,'finish!','color','');
end
close(h);
warning off
end
%%
%%解密图像,调用decrypt函数
% function J=decrypt(Ie,R,kk);
% T=96; % period of Arnold transform
% J2r=Ie(:,:,1);J2g=Ie(:,:,2);J2b=Ie(:,:,3);
% J2r=dct2(J2r);J2g=dct2(J2g);J2b=dct2(J2b);
% Y1r=blkart2a(J2r,T-kk);Y1g=blkart2a(J2g,T-kk);Y1b=blkart2a(J2b,T-kk);
% [J0r,J0g,J0b]=iTmatrix(Y1r,Y1g,Y1b,R);
% J1r=idct2(J0r);J1g=idct2(J0g);J1b=idct2(J0b);
% Yr=blkart2a(J1r,T-kk);Yg=blkart2a(J1g,T-kk);Yb=blkart2a(J1b,T-kk);
% [Jr,Jg,Jb]=iTmatrix(Yr,Yg,Yb,R);
% J(:,:,1)=Jr;J(:,:,2)=Jg;J(:,:,3)=Jb;
‘肆’ Matlab编程
看下这个程序function main() %主要思想是从两幅图像中选取信息,然后置乱成一幅图像。 %这样可以从要加密的多幅(2*n幅)图像中,按照上述思想,得到一半数目(n幅)的图像。 %对得到的图像进行自适应算法的隐藏,又可以得到(n-1)幅的图像。 %对(n-1)幅的图像进行Arnold变换,得到(n-1)幅的图像作为密钥,此外,密钥还有迭代次数,置乱规则,Arnold加密规则 %主要缺点是Arnold的周期较大,程序的运行的时间长些,我的电脑需要8分钟,另外,Arnold只能处理方阵 %图像的置乱加密算法很多,本程序中用到的置乱加密算法只是其中一种方法,仅仅提出一个多幅图像加密的思想,后期还有许多的工作要做。 %读入四幅图像 F1 = imread('lena.gif'); F2 = imread('monkey.gif'); F3 = imread('house.gif'); F4 = imread('cameraman.gif'); %对图像的置乱 pic1_luan = luan(F1,F2); pic2_luan = luan(F3,F4); %显示置乱后的图像 pic1_luan = uint8(pic1_luan); figure,imshow(pic1_luan),title('pic1 luan') pic2_luan = uint8(pic2_luan); figure,imshow(pic2_luan),title('pic2 luan') %将两幅置乱图像进行隐藏 X1 = input('请输入一个混合迭代参数:'); pic1_hide = hide(pic1_luan,X1,pic2_luan); %对隐藏后的图像进行Arnold置乱加密 diedai1 = input('请输入一个迭代的参数:') pic1_jiami = Arnold(pic1_hide,diedai1,0); %显示加密后的图像 pic1_jiami = uint8(pic1_jiami); figure,imshow(pic1_jiami),title('pic1 jiami') diedai2 = input('请输入一个迭代的参数:') pic2_jiami = Arnold(pic2_luan,diedai2,0); pic2_jiami = uint8(pic2_jiami); figure,imshow(pic2_jiami),title('pic2 jiami') %解密图像 pic1_jiemi = Arnold(pic1_jiami,diedai1,1); pic2_jiemi = Arnold(pic2_jiami,diedai2,1); %恢复隐藏后的图像 pic1_huifu = huifu(pic1_jiemi,X1,pic2_jiemi); %置乱的逆处理,得到恢复后的图像 [image1,image2] = ni_luan(pic1_huifu); [image3,image4] = ni_luan(pic2_jiemi); %显示各个图像 F1 = uint8(F1); figure,imshow(F1),title('F1'); figure,imhist(F1),title('F1的直方图'); image1 = uint8(image1); figure,imshow(image1),title('image1'); figure,imhist(image1),title('image1的直方图'); F2 = uint8(F2); figure,imshow(F2),title('F2'); figure,imhist(F2),title('F2的直方图'); image2 = uint8(image2); figure,imshow(image2),title('image2'); figure,imhist(image2),title('image2的直方图'); F3 = uint8(F3); figure,imshow(F3),title('F3'); figure,imhist(F3),title('F3的直方图'); image3 = uint8(image3); figure,imshow(image3),title('image3'); figure,imhist(image3),title('image3的直方图'); F4 = uint8(F4); figure,imshow(F4),title('F4'); figure,imhist(F4),title('F4的直方图'); image4 = uint8(image4); figure,imshow(image4),title('image4'); figure,imhist(image4),title('image4的直方图'
‘伍’ 基于Arnold置乱的数字水印图像加密算法的设计,基于Matlab语言编程,完成Arnold置乱算法,并用Matlab GUI工
clc
clear all;
iTimes=10; %置乱次数
% 读入水印图像
file_name='3232水印.bmp';
message=double(imread(file_name));
%水印图像矩阵的行数与列数
Mm=size(message,1);
Nm=size(message,2);
%对水印图像进行arnold置乱
if Mm~=Nm
error('水印矩阵必须为方阵');
end
if Mm~=90
error('必须为90*90大小,或者修改置乱次数');
end
tempImg=message; %图像矩阵赋给tempImg
for n=1:iTimes %置乱次数
for u=1:Mm
for v=1:Nm
temp=tempImg(u,v);
ax=mod((u-1)+(v-1),Mm)+1; %新像素行位置
ay=mod((u-1)+2*(v-1),Nm)+1; %新像素列位置
outImg(ax,ay)=temp;
end
end
tempImg=outImg;
end
% 显示水印,嵌入水印图像与原始图像
figure(1)
subplot(1,3,1);
imshow(message,[]);
title('原始水印');
subplot(1,3,2)
imshow(outImg,[]);
title('置乱水印');
% arnold反置乱
message_arnold=tempImg;
iTimes1=60-iTimes
%置乱后水印图像矩阵的行数与列数
Mo=size(outImg,1);
No=size(outImg,2);
for n=1:iTimes1 % 次数
for u=1:Mo
for v=1:No
temp1=tempImg(u,v);
bx=mod((u-1)+(v-1),Mo)+1;
by=mod((u-1)+2*(v-1),No)+1;
outImg1(bx,by)=temp1;
end
end
tempImg=outImg1;
end
message=outImg1;
% 显示反置乱后水印
%figure(3)
%subplot(1,3,1);
%imshow(message_arnold,[]);
%title('提取的置乱水印');
subplot(1,3,3);
imshow(message,[]);
title('反置乱(恢复)水印');
%subplot(1,3,3);
%imshow(orig_watermark,[])
%title('原始水印')
gui 自己学学吧 matlab中文论坛 gui板块
‘陆’ 在MATLAB的sift算法中,怎么用一个模板与多幅图像进行匹配
(1) 尺度不变特征变换(SIFT算法)概要
是一种计算机视觉的算法,用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。
此算法由 David Lowe 在1999年所发表,2004年完善总结。其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。此算法有其专利,专利拥有者为 英属哥伦比亚大学。
局部影像特征的描述与侦测可以帮助辨识物体,SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。 对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显着而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用 SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。
(2 ) Matlab代码主要功能函数如下: match.m:测试程序
功能:该函数读入两幅(灰度)图像,找出各自的 SIFT 特征, 并显示两连接两幅图像中被匹配的特征点(关键特征点(the matched keypoints)直线(将对应特征点进行连接)。判断匹配的准则是匹配距离小于distRatio倍于下一个最近匹配的距离( A match is accepted only if its distance is less than distRatio times the distance to the second closest match. 该程序返回显示的匹配对的数量。( It returns the number of matches displayed.) 调用实例: match('desk.jpg','book.jpg');
( 假如,想测试一个含有一本书的桌面的图像 和一本书的图像之间特征匹配) 调用方法和参数描述:略。 注意:(1)图像为灰度图像,如果是彩色图像,应该在调用前利用rgb2gray转换为灰度图像。
(2)参数distRatio 为控制匹配点数量的系数,这里取 0.6,该参数决定了匹配点的数量,在Match.m文件中调整该参数,获得最合适的匹配点数量。 sift.m :尺度不变特征变换(SIFT算法)的核心算法程序
功能:该函数读入灰度图像,返回SIFT 特征关键点( SIFT keypoints.) 调用方法和参数描述:
调用方式:[image, descriptors, locs] = sift(imageFile) 输入参数( Input parameters):
imageFile: 图像文件名.
输出或返回参数( Returned):
image: 是具有double format格式的图像矩阵
descriptors: 一个 K-by-128 的矩阵x, 其中每行是针对找到的K个关键特征点(the K keypoints)的不变量描述子. 这个描述子(descriptor)是一个拥有128个数值并归一化为单位长度向量.
locs: 是K-by-4 矩阵, 其中的每一行具有四个数值,表示关键点位置信息 (在图像中的行坐标,列坐标(row, column) ,注意,一般图像的左上角为坐标原点), 尺度scale,高斯尺度空间的参数,其中该参数也决定了frame(结构)确定的图像disk的大小, 最后一个参数是方向orientation). 方向参数的范围是[-PI, PI] 单位为弧度.
appendimages.m: 该函数创建一个新的图像分别包含两个匹配的图像和他们之间
的匹配对的连接直线. (3) 实际案例执行结果:
程序代码使用matlab和c混合编程。用matlab打开文件中的sift_match.m文件,并执行。如下图所示:
‘柒’ matlab图像处理如何用c++做界面
matlab自己可以做界面,找本书看下就可以,很简单,vc+matlab的联合编程比较难,估计配置就烦死你
在粗糙也足够你用,你的级别还没到嫌弃它粗糙的地步~
‘捌’ matlab 图像 使用变量名储存问题
看看这个程序函数main()的
%的主要思想是选择从两个图像信息,然后炒成一个单一的形象。
%这可以从多个被加密(2 * n个)图像,按照上述思路,获得图像的一半的数量(n个)。
%隐藏图像所获得的自适应算法中,并能获得(N-1)个图像。
%有关第(n-1)图像Arnold变换件,(N-1)作为关键件的图像,此外,还有迭代的密钥号,扰码规则,阿诺德加密规则
%阿诺德的主要缺点是较大的周期,在程序运行的时间很长,我的电脑需要8分钟,此外,阿诺德能够处理方阵
%图像置乱加密算法很多这样的程序中使用的扰码加密算法只有一个办法只有提出的想法多图像加密,也可以后期做了很多工作。
%阅读四个图像
F1 = imread('lena.gif');
F2 = imread('monkey.gif');
F3 = imread('house.gif');
F4 = imread('cameraman.gif');图像争先恐后
pic1_luan = luan(F1,F2)的
%;
pic2_luan = luan(F3,F4);
%的显示失真的图像
pic1_luan = UINT8(pic1_luan);
身影,imshow(pic1_luan),标题(“PIC1 luan”)的
pic2_luan = UINT8(pic2_luan);
身影,imshow(pic2_luan),标题(“PIC2 luan”),点击看详细%两个炒图像隐藏
X1 =输入('请输入一个混合迭代参数:');
pic1_hide =隐藏(pic1_luan,X1,pic2_luan);图像被隐藏Arnold置乱加密
diedai1 =输入('输入一个迭代的参数:')后
%
pic1_jiami =阿诺德(pic1_hide,diedai1,0);
%显示加密图像
pic1_jiami = UINT8(pic1_jiami);
身影,imshow(pic1_jiami),标题(“PIC1佳米')的
diedai2 =输入('请输入一个迭代的参数:')
pic2_jiami =阿诺德(pic2_luan,diedai2,0);
pic2_jiami = UINT8(pic2_jiami);
身影,imshow(pic2_jiami),标题(“PIC2佳米')的
%解密图像
pic1_jiemi =阿诺德(pic1_jiami,diedai1,1);
pic2_jiemi =阿诺德(pic2_jiami,diedai2,1);隐藏图像
pic1_huifu =惠福(pic1_jiemi,X1,pic2_jiemi)后
%的回收率;
%争先恐后逆过程,
恢复后[image1的,IMAGE2] = ni_luan(pic1_huifu)获得的图像;
[一系列其他,为image4] = ni_luan(pic2_jiemi);
%显示每个图像
F1 = UINT8(F1);
身影,imshow(F1),标题('F1');
身影,imhist(F1),标题(“F1直方图');
image1的= UINT8(image1的);
身影,imshow(image1的),标题('image1的');
身影,imhist(image1的),标题('image1的直方图');
F2 = UINT8(F2);
身影,imshow(F2),标题('F2');
身影,imhist(F2),标题(“F2的直方图');
IMAGE2 = UINT8(IMAGE2);
身影,imshow(IMAGE2),标题(“IMAGE2');
身影,imhist(IMAGE2),标题(“直方图IMAGE2');
F3 = UINT8(F3);
身影,imshow(F3),标题('F3');
身影,imhist(F3),标题(“F3的直方图');
一系列其他= UINT8(一系列其他);
身影,imshow(一系列其他),标题(“一系列其他');
身影,imhist(一系列其他),标题(“直方图的一系列其他');
F4 = UINT8(F4);
身影,imshow(F4),标题('F4');
身影,imhist(F4),标题(“F4的直方图');
为image4 = UINT8(为image4);
身影,imshow(为image4),标题(“为image4');
身影,imhist(为image4),标题(“为image4直方图”
‘玖’ 用matlab语言编写显示一幅彩色图像程序
看下这个程序function main()
%主要思想是从两幅图像中选取信息,然后置乱成一幅图像。
%这样可以从要加密的多幅(2*n幅)图像中,按照上述思想,得到一半数目(n幅)的图像。
%对得到的图像进行自适应算法的隐藏,又可以得到(n-1)幅的图像。
%对(n-1)幅的图像进行Arnold变换,得到(n-1)幅的图像作为密钥,此外,密钥还有迭代次数,置乱规则,Arnold加密规则
%主要缺点是Arnold的周期较大,程序的运行的时间长些,我的电脑需要8分钟,另外,Arnold只能处理方阵
%图像的置乱加密算法很多,本程序中用到的置乱加密算法只是其中一种方法,仅仅提出一个多幅图像加密的思想,后期还有许多的工作要做。
%读入四幅图像
F1 = imread('lena.gif');
F2 = imread('monkey.gif');
F3 = imread('house.gif');
F4 = imread('cameraman.gif');
%对图像的置乱
pic1_luan = luan(F1,F2);
pic2_luan = luan(F3,F4);
%显示置乱后的图像
pic1_luan = uint8(pic1_luan);
figure,imshow(pic1_luan),title('pic1 luan')
pic2_luan = uint8(pic2_luan);
figure,imshow(pic2_luan),title('pic2 luan')
%将两幅置乱图像进行隐藏
X1 = input('请输入一个混合迭代参数:');
pic1_hide = hide(pic1_luan,X1,pic2_luan);
%对隐藏后的图像进行Arnold置乱加密
diedai1 = input('请输入一个迭代的参数:')
pic1_jiami = Arnold(pic1_hide,diedai1,0);
%显示加密后的图像
pic1_jiami = uint8(pic1_jiami);
figure,imshow(pic1_jiami),title('pic1 jiami')
diedai2 = input('请输入一个迭代的参数:')
pic2_jiami = Arnold(pic2_luan,diedai2,0);
pic2_jiami = uint8(pic2_jiami);
figure,imshow(pic2_jiami),title('pic2 jiami')
%解密图像
pic1_jiemi = Arnold(pic1_jiami,diedai1,1);
pic2_jiemi = Arnold(pic2_jiami,diedai2,1);
%恢复隐藏后的图像
pic1_huifu = huifu(pic1_jiemi,X1,pic2_jiemi);
%置乱的逆处理,得到恢复后的图像
[image1,image2] = ni_luan(pic1_huifu);
[image3,image4] = ni_luan(pic2_jiemi);
%显示各个图像
F1 = uint8(F1);
figure,imshow(F1),title('F1');
figure,imhist(F1),title('F1的直方图');
image1 = uint8(image1);
figure,imshow(image1),title('image1');
figure,imhist(image1),title('image1的直方图');
F2 = uint8(F2);
figure,imshow(F2),title('F2');
figure,imhist(F2),title('F2的直方图');
image2 = uint8(image2);
figure,imshow(image2),title('image2');
figure,imhist(image2),title('image2的直方图');
F3 = uint8(F3);
figure,imshow(F3),title('F3');
figure,imhist(F3),title('F3的直方图');
image3 = uint8(image3);
figure,imshow(image3),title('image3');
figure,imhist(image3),title('image3的直方图');
F4 = uint8(F4);
figure,imshow(F4),title('F4');
figure,imhist(F4),title('F4的直方图');
image4 = uint8(image4);
figure,imshow(image4),title('image4');
figure,imhist(image4),title('image4的直方图'