『壹』 Matlab數字圖像處理,要求詳細解釋代碼,每個函數都要解釋.這個是對圖像求幅值譜和相位譜,並對其進行重構.
我和你說說吧,先說基本函數:
fft2是求傅里葉變換;
fftshift是把變換後的圖像轉置,讓非零值轉到中心,好觀察。
real就是求實部;
imag就是求虛部;
你知道經過傅里葉變換原來的空間域轉到頻域上了吧?
頻域的概念是有實部有虛部的是吧,那你怎麼能在平面上表示出來呢?
就用到了復數里的幾個概念:
一個是虛部實部的平方和均值(sqrt( RRfdp1.^2+IIfdp1.^2);)
在一個就是夾角問題(b=angle(fftI);)
這個知識高數都有,我就不用說了吧?
至於a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;
我覺得就是一個圓滑函數,比如235.536我想讓它變成240.
就是乘以圓滑系數,再乘以225。
max(max(a))是求矩陣a里的最大的那個像素值。
希望你掌握好的學習方法,分析程序如果看不懂的話可以一行行的運行,通過workspace找到分步運行的結果,具體分析。
最後感慨一句:網路知道不是賺錢的地方,分多分少不是衡量知識的標准。我助人為樂我快樂,積分又不能換錢,要那麼多幹嘛。
『貳』 各位大俠,急求AES圖像加密的MATLAB代碼!!!
首先說定義的函數可能在調用時出現問題,原因是函數的輸入部分plot在其中並沒有使用,再者輸出參數應包括m和n,因此函數定義部分應該改為function
[hist,
rgbt,m,n]
=
getimagehists(imagename)。
在執行完hist
=
hist
/
(m*n),執行如下語句完成數據保存
save
hists.mat
hist
接著可以執行
clear
all
並執行
load
hists.mat
hist
及whos
以驗證數據存儲是否成功
『叄』 急求一個完整的c語言圖像置亂加密演算法!!!
#include"windows.h"
#include"stdio.h"
#include"string.h"
#include"malloc.h"
unsignedchar*pBmpBuf;//讀入圖像數據的指針
unsignedchar*pEnBmpBuf;//加密圖像數據的指針
unsignedchar*pUnBmpBuf;//解密圖像數據的指針
charkey=255;//密鑰
intbmpWidth;//圖像的寬
intbmpHeight;//圖像的高
RGBQUAD*pColorTable;//顏色表指針
intbiBitCount;//圖像類型,每像素位數
boolreadBmp(char*bmpName)
{
//二進制讀方式打開指定的圖像文件
FILE*fp=fopen(bmpName,"rb");
if(fp==0)return0;
//跳過點陣圖文件頭結構BITMAPFILEHEADER
fseek(fp,sizeof(BITMAPFILEHEADER),0);
//定義點陣圖信息頭結構變數,讀取點陣圖信息頭進內存,存放在變數head中
BITMAPINFOHEADERhead;
fread(&head,sizeof(BITMAPINFOHEADER),1,fp);
//獲取圖像寬、高、每像素所佔位數等信息
bmpWidth=head.biWidth;
bmpHeight=head.biHeight;
biBitCount=head.biBitCount;
//定義變數,計算圖像每行像素所佔的位元組數(必須是4的倍數)
intlineByte=(bmpWidth*biBitCount/8+3)/4*4;
//灰度圖像有顏色表,且顏色表表項為256
if(biBitCount==8){
//申請顏色表所需要的空間,讀顏色表進內存
pColorTable=newRGBQUAD[256];
fread(pColorTable,sizeof(RGBQUAD),256,fp);
}
//申請點陣圖數據所需要的空間,讀點陣圖數據進內存
pBmpBuf=newunsignedchar[lineByte*bmpHeight];
fread(pBmpBuf,1,lineByte*bmpHeight,fp);
//關閉文件
fclose(fp);
return1;
}
voidencrypt(chark)
{
//加密,奇數位置的像素使用位運算加密,偶數位置像素為原始值
intlineByte=(bmpWidth*biBitCount/8+3)/4*4;
pEnBmpBuf=newunsignedchar[lineByte*bmpHeight];
for(inti=0;i<lineByte*bmpHeight;i++)
{
if(i%2==0)
{
pEnBmpBuf[i]=pBmpBuf[i];
}
elsepEnBmpBuf[i]=pBmpBuf[i]^k;
}
}
voinencrypt(chark)
{
//解密
intlineByte=(bmpWidth*biBitCount/8+3)/4*4;
pUnBmpBuf=newunsignedchar[lineByte*bmpHeight];
for(inti=0;i<lineByte*bmpHeight;i++)
{
if(i%2==0)
{
pUnBmpBuf[i]=pEnBmpBuf[i];
}
elsepUnBmpBuf[i]=pEnBmpBuf[i]^k;
}
}
boolsaveBmp(char*bmpName,unsignedchar*imgBuf,intwidth,intheight,
intbiBitCount,RGBQUAD*pColorTable)
{
//如果點陣圖數據指針為0,則沒有數據傳入,函數返回
if(!imgBuf)
{printf("error !");return0;}
//顏色表大小,以位元組為單位,灰度圖像顏色表為1024位元組,彩色圖像顏色表大小為0
intcolorTablesize=0;
if(biBitCount==8)
colorTablesize=1024;
//待存儲圖像數據每行位元組數為4的倍數
intlineByte=(width*biBitCount/8+3)/4*4;
//以二進制寫的方式打開文件
FILE*fp=fopen(bmpName,"wb");
if(fp==0)return0;
//申請點陣圖文件頭結構變數,填寫文件頭信息
BITMAPFILEHEADERfileHead;
fileHead.bfType=0x4D42;//bmp類型
//bfSize是圖像文件4個組成部分之和
fileHead.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)
+colorTablesize+lineByte*height;
fileHead.bfReserved1=0;
fileHead.bfReserved2=0;
//bfOffBits是圖像文件前3個部分所需空間之和
fileHead.bfOffBits=54+colorTablesize;
//寫文件頭進文件
fwrite(&fileHead,sizeof(BITMAPFILEHEADER),1,fp);
//申請點陣圖信息頭結構變數,填寫信息頭信息
BITMAPINFOHEADERhead;
head.biBitCount=biBitCount;
head.biClrImportant=0;
head.biClrUsed=0;
head.biCompression=0;
head.biHeight=height;
head.biPlanes=1;
head.biSize=40;
head.biSizeImage=lineByte*height;
head.biWidth=width;
head.biXPelsPerMeter=0;
head.biYPelsPerMeter=0;
//寫點陣圖信息頭進內存
fwrite(&head,sizeof(BITMAPINFOHEADER),1,fp);
//如果灰度圖像,有顏色表,寫入文件
if(biBitCount==8)
fwrite(pColorTable,sizeof(RGBQUAD),256,fp);
//寫點陣圖數據進文件
fwrite(imgBuf,height*lineByte,1,fp);
//關閉文件
fclose(fp);
return1;
}
voidmain()
{
charinFileName[90],outFileName1[90],outFileName2[90];
printf("請輸入原始點陣圖文件的文件名:");
scanf("%s",inFileName);
printf("請輸入加密程序產生的新點陣圖文件的文件名:");
scanf("%s",outFileName1);
printf("請輸入解密程序產生的新點陣圖文件的文件名:");
scanf("%s",outFileName2);
//讀入指定BMP文件進內存
readBmp(inFileName);
//輸出圖像的信息
printf("width=%d,height=%d,biBitCount=%d ",bmpWidth,bmpHeight,biBitCount);
//圖像加密
encrypt(key);
//將加密數據存檔
saveBmp(outFileName1,pEnBmpBuf,bmpWidth,bmpHeight,biBitCount,pColorTable);
//圖像解密
unencrypt(key);
//將解密數據存檔
saveBmp(outFileName2,pUnBmpBuf,bmpWidth,bmpHeight,biBitCount,pColorTable);
//清除緩沖區,pBmpBuf和pColorTable是全局變數,在文件讀入時申請的空間
delete[]pBmpBuf;
if(biBitCount==8)
delete[]pColorTable;
}
讀取BMP,使用位運算加密,你也可以自己改
dem數據的話,一般用GDAL庫讀取,加密的思路是類似的,最簡單方法是把奇數位和偶數位的高程值置換一下
『肆』 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),謝謝!
clear;clc; % 清空命令行和workspace變數
x=imread('加密後的mozhun.bmp','bmp'); %讀取圖像
[a b c]=size(x); %獲取圖像3個通道的大小
N=a*b;
m(1)=input('請輸入密鑰: '); %input輸入命令,提示輸入密鑰
disp('解密中'); %顯示字元串『解密中』
for i=1:N-1 %判斷是否是正確的密鑰
m(i+1)=4*m(i)-4*m(i)^2;
end
m=mod(1000*m,350); %求模運算
m=uint8(m); %將m中的每個元素設置為Uint8型的元素而不是double型
n=1;
for i=1:a
for j=1:b
e(i,j)=bitxor(m(n),x(i,j)); %對圖像中每個像素點進行按位異或
n=n+1;
end
end
imwrite(e,'解密後的mozhun.bmp','bmp'); %將解密後的圖片以點陣圖形式寫入文件
disp('解密成功'); %顯示提示信息
winopen('解密後的mozhun.bmp');% 打開解密圖片
總的來說,這個程序的作用就是讀一張經過加密的圖片,然後通過輸入的密鑰對圖像進行解密,並將解密之後的圖片保存並顯示。