加密性能分析(一)相邻像素相关性的matlab实现

相邻像素相关性

(一)概念

​ 相邻像素相关性反映图像相邻位置像素值的相关程度。好的图像加密算法应该能降低相邻像素的相关性,尽量达到零相关。一般要分析图像的水平、垂直、对角像素三个方面。
​ 本文中将给出相关系数和分布图像的matlab实现代码。

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

​ 首先上公式:

​ 公式解释:在图像的灰度像素值矩阵中随机抽取N 对相邻像素,x_i 和y_i 是某对相邻像素的像素值。

    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;

相邻像素相关性的matlab实现的更多相关文章

  1. 图像像素灰度内插(Matlab实现)

    常用的像素灰度内插法:最近邻元法.双线性内插法.三次内插法 %%像素灰度内插 factor = 0.75;%缩放比 u = 0.6;v = 0.7; itp1 = uint8(zeros(ceil(h ...

  2. 在图像中随机更改像素值程序——matlab

    I=imread('C:\Users\wangd\Desktop\result3.png'); % m = rgb2gray(I); % r = unidrnd(,,); %产生一个1*100的数组, ...

  3. matlab练习程序(Moravec算子)

    这个算子算是图像历史上第一个特征点提取算法了,1977年提出的,很简单,拿来练手很合适. 算法原理如下: 1.选取一个合理的邻域遍历图像,这里是5*5邻域的.在邻域中依次计算,垂直,水平,对角与反对角 ...

  4. MatLab角点检測(harris经典程序)

    http://blog.csdn.net/makenothing/article/details/12884331 这是源博客的出处,鄙人转过来是为了更好的保存!供大家一起学习!已将原始的博客的文章的 ...

  5. 马尔科夫随机场(MRF)及其在图像降噪中的matlab实现

    (Markov Random Field)马尔科夫随机场,本质上是一种概率无向图模型 下面从概率图模型说起,主要参考PR&ML 第八章 Graphical Model (图模型) 定义:A g ...

  6. OpenCV2计算机编程手册(一)操作像素

    1. 引言 从根本上来说,一张图像是一个由数值组成的矩阵.这也是opencv中使用 代表黑色,代表白色.对于彩色图像(BGR三通道)而言,每个像素需要三个这样的8位无符号数来表示,这种情况下,矩阵的元 ...

  7. MATLAB图像处理函数汇总(二)

    60.imnoise 功能:增加图像的渲染效果. 语法: J = imnoise(I,type) J = imnoise(I,type,parameters) 举例 I = imread('eight ...

  8. Paper | 帧间相关性 + 压缩视频质量增强(MFQE)

    目录 1. ABSTRACT 2. INTRODUCTION 3. RELATED WORKS 3.1. Quality Enhancement 3.2. Multi-frame Super-reso ...

  9. OpenCV操作像素

    在了解了图像的基础知识和OpenCV的基础知识和操作以后,接下来我们要做的就对像素进行操作,我们知道了图像的本质就是一个矩阵,那么一个矩阵中存储了那么多的像素,我们如何来操作呢?下面通过几个例子来看看 ...

  10. OpenCV 学习之路(2) -- 操作像素

    本节内容: 访问像素值 用指针扫描图像 用迭代器扫描图像 编写高效的图像扫描循环 扫描图像并访问相邻像素 实现简单的图像运算 图像重映射 访问像素值 准备工作: 创建一个简单函数,用它在图像中加入椒盐 ...

随机推荐

  1. Java_Day16_作业

    A:简答题 1.请把我们讲解过的所有类中的方法在API中找到,并使用自己的话进行描述 答案: Map public V put(K key, V value): public void clear() ...

  2. Thread 和 ThreadPool 简单梳理(C#)【并发编程系列】

    〇.前言 对于 Thread 和 ThreadPool 已经是元老级别的类了.Thread 是 C# 语言对线程对象的封装,它从 .NET 1.0 版本就有了,然后 ThreadPool 是 .Net ...

  3. Unity UGUI的CanvasScaler(画布缩放器)组件的介绍及使用

    Unity UGUI的CanvasScaler(画布缩放器)组件的介绍及使用 1. 什么是CanvasScaler组件? CanvasScaler是Unity中UGUI系统中的一个组件,用于控制画布的 ...

  4. 自用 .net C# CSV文件写入读取工具类

    using System.Data; using System.IO; using System.Linq; using System.Text; using System.Text.RegularE ...

  5. 面试题 01.03. URL化

    面试题 01.03. URL化 简单 URL化.编写一种方法,将字符串中的空格全部替换为%20.假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的"真实"长度.(注:用Ja ...

  6. Python工具箱系列(三十九)

    使用zlib对数据进行压缩 现实世界中,大量存在着对数据压缩的需求.为此,python内置了zlib压缩库,可以方便的对任意对象进行压缩. 下述代码演示了对字符串进行压缩: import zlib # ...

  7. [docker]封装python的docker镜像

    前言 基于alpine的python镜像封装. docker pull python:3.10-alpine 准备 requirements.txt内容: fastapi uvicorn server ...

  8. Selenium 学习笔记

    Selenium 学习笔记 Selenium 框架是时下在 Web 领域中被使用得最为广泛的自动化测试工具集之一,它能帮助程序员们面向指定的 Web 前端应用快速地开发出自动化测试用例,且能实现跨各种 ...

  9. Robot 框架学习笔记

    Robot 框架学习笔记 为了更好地让读者理解快速学习新框架的思路,笔者接下来会继续介绍另一个名为 Robot 的自动化测试框架,希望读者能参考笔者从零开始讲解一个开发/测试框架的流程,从中总结出适合 ...

  10. LeetCode952三部曲之三:再次优化(122ms -> 96ms,超51% -> 超91%)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<LeetCode952三部曲之 ...