『壹』 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的直方圖'