MATLAB LSB图像信息隐藏 最低位平面验证 以及PSNR SSIM评价
?
一、算法原理
1.位平面定義
定義:對(duì)于一幅用多個(gè)比特表示其灰度值的圖像來(lái)說(shuō),其中的每個(gè)比特可看作表示了一個(gè)二值的平面,也稱為圖像的位平面。
2. LSB算法介紹
LSB是Least Singificant Bit的縮寫, 意思是最不重要比特位。LSB算法利用了數(shù)字圖像處理中位平面的原理, 即改變圖像的最低位的信息, 對(duì)圖像信息產(chǎn)生的影響非常小,人眼的視覺(jué)感知系統(tǒng)往往不能察覺(jué)。以一幅256灰度的圖像為例, 256灰度共需要8個(gè)位來(lái)表示, 但其中每一個(gè)位的作用是不一樣的, 越高位對(duì)圖像的影響越大, 反之越低的位影響越小, 甚至不能感知。LSB 算法簡(jiǎn)單實(shí)現(xiàn)容易, 同時(shí)可以保證數(shù)字水印的不可見(jiàn)性, 由于可以在最低位的每個(gè)像素上都插入數(shù)字水印信息, 因此有較大的信息嵌入量。但是由于數(shù)字水印位于圖像的不重要像素位上, 因此很容易被圖像過(guò)濾、量化和幾何型變等操作破壞, 以致無(wú)法恢復(fù)數(shù)字水印。
3.? 基本評(píng)價(jià)指標(biāo)峰值信噪比 PSNR
???????峰值信噪比 PSNR
PSNR(Peak Signal to Noise Ratio),即峰值信噪比,是一種比較簡(jiǎn)單的全參考圖像質(zhì)量評(píng)價(jià)指標(biāo),其計(jì)算公式如下:
公式中,MAX為每個(gè)像素分量的最大誤差,d為每個(gè)像素分量的位深;MSE為該分量畫面的均方差,SSE為該分量畫面的和方差,S為該分量畫面的像素?cái)?shù),X和Y分別表示待評(píng)價(jià)圖像和參考圖像(順序無(wú)關(guān)),它們都是H行W列的圖像,X(h,w)表示待評(píng)價(jià)圖像第h行第w列的像素值,Y(h,w)表示參考圖像第h行第w列的像素值。
上述計(jì)算過(guò)程得到的是1個(gè)分量(Y、Cb、Cr、R、G、B)的PSNR值。要計(jì)算整幀的PSNR值,應(yīng)基于整幀的MSE值,它是所有分量MSE值的加權(quán)平均:
公式中,0、1、2表示幀的3個(gè)分量,運(yùn)算符?表示向量點(diǎn)乘。
4. SSIM評(píng)價(jià)
SSIM(Structural Similarity Index Measurement),即結(jié)構(gòu)相似度測(cè)量,是一種全參考圖像質(zhì)量評(píng)價(jià)指標(biāo):
注意:這個(gè)算法并不是在最低位平面嵌入水印!!!這個(gè)是不同位平面上嵌入水印對(duì)圖片影響的驗(yàn)證實(shí)驗(yàn)。
二、 運(yùn)行結(jié)果
1. 圖片8個(gè)位平面展示
3. 每個(gè)位平面嵌入水印(真正LSB算法只需要嵌入最低位平面)
4. 顯示已經(jīng)嵌入水印圖
5.PSNR SSIM評(píng)價(jià)
代碼在后面
LSB代碼
clc clear all; close all;% 讀入載體圖像 file_name='lena.jpg'; origin=file_name; cover_object=imread(file_name); % 讀入水印圖像 file_name='cuc.jpg'; message=imread(file_name); message=double(message); message=round(message./256); message=uint8(message);% 確定載體圖像的大小 Mc=size(cover_object,1); Nc=size(cover_object,2); % 確定水印圖像的大小 Mm=size(message,1); Nm=size(message,2);%位平面分解圖 figure; X=double(imread('lena.jpg')); [h w] = size(X); subplot(3,3,1); imshow(X,[]); title('原始圖像'); for k=1:8for i=1:hfor j=1:w%bitget函數(shù)首先將X(i,j)處灰度值分解為二進(jìn)制串,然后取第k位tmp(i,j) = bitget(X(i,j),k);endendsubplot(3,3,k+1);imshow(tmp,[]);ind = num2str(k);imti = ['第',ind,'個(gè)位平面'];title(imti); end% 將水印擴(kuò)展為原圖像大小,并寫入水印 for ii = 1:Mcfor jj = 1:Ncwatermark(ii,jj)=message(mod(ii, Mm)+1,mod(jj, Nm)+1);end endfigure; title('加入的水印圖像') imshow(watermark,[])% 將原圖的最低有效位值換為水印的值 figure; watermarked_LSB=cover_object; for q=1:8watermarked_image=cover_object;for ii = 1:Mcfor jj = 1:Ncwatermarked_image(ii, jj)=bitset(watermarked_image(ii, jj), q, watermark(ii ,jj));end endif q==1watermarked_LSB = watermarked_image;endsubplot(3,3,1)imshow('lena.jpg')title('原圖')subplot(3,3,q+1);imshow(watermarked_image,[]);ind = num2str(q);imtii = ['第',ind,'個(gè)位平面加入水印后的結(jié)果'];title(imtii);disp(['第',ind,'個(gè)位平面加入水印后的PSNR:'])psnr=PSNR(cover_object, watermarked_image)disp(['第',ind,'個(gè)位平面加入水印后的SSIM:'])ssim_val=ssim(cover_object, watermarked_image)%%計(jì)算BERorig_watermark=imread('cuc.jpg');message_pad=double(orig_watermark);message_pad=round(message_pad./256);message_pad=uint8(message_pad);message_pad=reshape(message_pad,[1,64*64]);Mw =size(watermarked_image,1);Nw =size(watermarked_image,2);for ii = 1:Mwfor jj = 1:Nwwatermark(ii, jj)=bitget(watermarked_image(ii, jj),q);endendwatermark_b=256*double(watermark);%將提取水印變?yōu)樵妓〈笮or ii = 1:Mm-1for jj = 1:Nm-1watermark1(ii+1,jj+1)=watermark_b(ii,jj);endendwatermark1(1,1)=watermark_b(Mm,Nm);%顯示提取的水印圖像message_pad_recover=double(watermark1);message_pad_recover=round(message_pad_recover./256);message_pad_recover=uint8(message_pad_recover);message_pad_recover=reshape(message_pad_recover,[1,64*64]);% 顯示提取錯(cuò)誤比特的比例len=length(message_pad);disp(['第',ind,'個(gè)位平面加入水印后的BER:'])bit_error_rate=sum(abs(message_pad_recover(1:len)-message_pad(1:len)))/lenendfigure; imshow(watermark1,[]); title('Recovered Watermark'); % 顯示已嵌入水印的圖像 figure; imshow(watermarked_LSB,[]); title('LSB嵌入水印后圖像');% 計(jì)算已嵌入水印圖像的PSNR和SSIM disp(['LSB加入水印后的osnr:']) psnr=PSNR(cover_object, watermarked_image) disp(['LSB加入水印后的ssim:']) ssim=ssim(cover_object, watermarked_image)PSNR SSIM評(píng)價(jià)代碼
%PSNR.m function S=PSNR(I,J) % PSNR(I,J) returns the peak signal to noise ratio) between I and J %(dB) % I is the original image and J is a modified version of I. % The PSNR value is useful to calculate the distortions on an image.% if (size(I)~=size(J)) % error('Las imagenes deben tener el mismo tama駉') % end % if (~isrgb(I) & ~isrgb(J))[m n] = size(I);A=double(I);B=double(J);sumaDif=0;maxI=m*n*max(max(A.^2));for u=1:mfor v=1:nsumaDif = sumaDif + (A(u,v)-B(u,v))^2;endendif (sumaDif==0) sumaDif=1;endS=maxI/sumaDif;S=10*log10(S); % else % error('Las imagenes no pueden ser en color') % end
?
總結(jié)
以上是生活随笔為你收集整理的MATLAB LSB图像信息隐藏 最低位平面验证 以及PSNR SSIM评价的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 山西财经大学计算机好考吗,听说这是中国最
- 下一篇: 垃圾回收与垃圾收集算法