【matlab】基于相邻像素相关性的加密性能分析

相邻像素相关性

(一)概念

相邻像素相关性反映图像相邻位置像素值的相关程度。好的图像加密算法应该能降低相邻像素的相关性,尽量达到零相关。一般要分析图像的水平、垂直、对角像素三个方面。

本文中将给出相关系数和分布图像的matlab实现代码。

(二)相邻像素的相关系数

首先上公式:
C x y = E [ ( x − μ x ) ( y − μ y ) ] σ x σ y C_{xy}=\frac{E[(x-\mu_x)(y-\mu_y)]}{\sigma_x\sigma_y} Cxy=σxσyE[(xμx)(yμy)]
C = ∑ i = 1 N ( x i − 1 N ∑ i = 1 N x i ) ( y i − 1 N ∑ i = 1 N y i ) ∑ i = 1 N ( x i − 1 N ∑ i = 1 N x i ) 2 × ∑ i = 1 N ( y i − 1 N ∑ i = 1 N y i ) 2 C=\frac{\sum_{i=1}^N(x_i-\frac{1}{N}\sum_{i=1}^Nx_i)(y_i-\frac{1}{N}\sum_{i=1}^Ny_i)}{\sqrt{\sum_{i=1}^N(x_i-\frac{1}{N}\sum_{i=1}^Nx_i)^2\times\sum_{i=1}^N(y_i-\frac{1}{N}\sum_{i=1}^Ny_i)^2}} C=i=1N(xiN1i=1Nxi)2×i=1N(yiN1i=1Nyi)2 i=1N(xiN1i=1Nxi)(yiN1i=1Nyi)
公式解释:在图像的灰度像素值矩阵中随机抽取N 对相邻像素, x i x_i xi y i y_i yi 是某对相邻像素的像素值。

matlab实现:
作用:计算相关系数
输入:x 一组像素值
y x对应的相邻像素
输出:l N对相邻像素值的相关系数

function l=coefficient_of_association (x,y)
%求相关系数
mean_x=mean(x);
mean_y=mean(y);
n=length(x);
up=0;
sum_x=0;
sum_y=0;
for i=1:n
    up=up+(x(i)-mean_x)*(y(i)-mean_y);
    sum_x=sum_x+(x(i)-mean_x)^2;
    sum_y=sum_y+(y(i)-mean_y)^2;
end
down=sqrt(sum_x*sum_y);
l=up/down;

作用:随机抽取n对相邻像素
输入:image 图像的灰度图矩阵
choose 水平、垂直、对角选择
n 随机抽样的相邻像素对数,n<=M*N
输出:l n对相邻像素值的相关系数

function l=Correlation_of_adjacent_pixels(image,choose,n)
%抽取n对相邻像素
%choose 选择1水平,2垂直,3对角
%n 抽样对数
image=double(image);
[M,N]=size(image);%M行N列

x_coor(1,:)=randi([1  N],1,n);%x序列x坐标
x_coor(2,:)=randi([1  M],1,n);%x序列y坐标
y_coor=ones(2,n);%y序列坐标

if choose==1
%水平
for i=1:n
    if x_coor(1,i)==N
        y_coor(1,i)=1;
    end
    if x_coor(1,i)<N
        y_coor(1,i)=x_coor(1,i)+1;
    end
    y_coor(2,i)=x_coor(2,i);
end
end

if choose==2
%垂直
for i=1:n
    if x_coor(2,i)==M
        y_coor(2,i)=1;
    end
    if x_coor(2,i)<M
        y_coor(2,i)=x_coor(2,i)+1;
    end
    y_coor(1,i)=x_coor(1,i);
end
end

if choose==3
%对角
for i=1:n
    if x_coor(1,i)==N
        y_coor(1,i)=1;
    end
    if x_coor(1,i)<N
        y_coor(1,i)=x_coor(1,i)+1;
    end
    
    if x_coor(2,i)==M
        y_coor(2,i)=1;
    end
    if x_coor(2,i)<M
        y_coor(2,i)=x_coor(2,i)+1;
    end
end
end

x=ones(1,n);
y=ones(1,n);
%获取像素值
for i=1:n
    x(i)=image(x_coor(2,i),x_coor(1,i));
    y(i)=image(y_coor(2,i),y_coor(1,i));
end

l=coefficient_of_association(x,y);

(三)相邻像素分布图

相邻像素分布图其实就是x坐标为图像灰度矩阵某像素值,y坐标为对应的相邻像素值的图像。

matlab实现:
作用:生成相邻像素分布图的x坐标和y坐标的矩阵
输入:img 图像灰度矩阵
choose 水平、垂直、对角选择
输出:s
二维矩阵,第一行为x坐标集合,第二行为y坐标集合

%像素相关图
function s=Pixel_correlation_diagram(choose,img)
%choose 1.水平相关 2.垂直相关 3.对角相关
[M,N]=size(img);%M行N列
x=ones(1,M*N);
y=ones(1,M*N);
num=1;
if choose==1
    for i=1:M
        for j=1:N
            x(num)=img(i,j);
            if j==N
                y(num)=img(i,1);
            end
            if j<N
                y(num)=img(i,j+1);
            end
            num=num+1;
        end
    end
end

if choose==2
    for i=1:M
        for j=1:N
            x(num)=img(i,j);
            if i==M
                y(num)=img(1,j);
            end
            if i<M
                y(num)=img(i+1,j);
            end
            num=num+1;
        end
    end
end

if choose==3
    for i=1:M
        for j=1:N
            x(num)=img(i,j);
            if i<M && j<N
                y(num)=img(i+1,j+1);
            end
            if i<M && j==N
                y(num)=img(i+1,1);
            end
            if i==M && j<N
                y(num)=img(1,j+1);
            end
            if i==M && j==N
                y(num)=img(1,1);
            end
            num=num+1;
        end
    end
end

s=ones(2,M*N);
s(1,:)=x;
s(2,:)=y;
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上官峰晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值