图像置乱之评价图像置乱度算法的选择
2016-07-23 15:40
531 查看
一、图像置乱度
所谓“图像置乱”,就是将图像的信息次序打乱,将a像素移动到b像素的位置上,b像素移动到c像素的位置上……使其变换成杂乱无章难以辨认的图像。
目前对于置乱的研究主要集中在置乱方法和置乱度评价两个方面。在置乱方法研究方面已取得了一定成效,同时也在探索更为简单、有效、安全、适用于任何图像( 不同大小,彩色和灰度) 的置乱方法。笔者在做关于图像置乱的过程中通过查阅文献找到了一个比较合理的图像置乱度评价方法,在使用过程中发现符合一般逻辑规律,即对于一幅图像置乱次数越多则其置乱度越大,此种方法符合这个规律。
二、方法核心思想
该方法认为图像像素之间具有一定相关性,在置乱过程中其像素位置被打乱,其相关性会降低,则可以利用这一点来评价图像置乱度,具体做法是将图像分成M X N 块,计算每一块像素的均值,接着计算这些像素均值的方差E,分别计算出原始图像的方差Eorg,再接着计算置乱后的方差Eden,这样置乱度S为:S = 1 - Eden / Eorg。
三、程序实现
用C语言实现了这个评价算法,具体代码如下:
四、效果评价
对1220X935连续置乱了三次,图像置乱度如下表:
因此可以用次算法座位图象置乱度评价方法。
所谓“图像置乱”,就是将图像的信息次序打乱,将a像素移动到b像素的位置上,b像素移动到c像素的位置上……使其变换成杂乱无章难以辨认的图像。
目前对于置乱的研究主要集中在置乱方法和置乱度评价两个方面。在置乱方法研究方面已取得了一定成效,同时也在探索更为简单、有效、安全、适用于任何图像( 不同大小,彩色和灰度) 的置乱方法。笔者在做关于图像置乱的过程中通过查阅文献找到了一个比较合理的图像置乱度评价方法,在使用过程中发现符合一般逻辑规律,即对于一幅图像置乱次数越多则其置乱度越大,此种方法符合这个规律。
二、方法核心思想
该方法认为图像像素之间具有一定相关性,在置乱过程中其像素位置被打乱,其相关性会降低,则可以利用这一点来评价图像置乱度,具体做法是将图像分成M X N 块,计算每一块像素的均值,接着计算这些像素均值的方差E,分别计算出原始图像的方差Eorg,再接着计算置乱后的方差Eden,这样置乱度S为:S = 1 - Eden / Eorg。
三、程序实现
用C语言实现了这个评价算法,具体代码如下:
@浪子帅哥 //计算置乱度函数, BlockSize为分块大小 double ScramblingDegree(int **imgdata) { //计算分块数 int SplRows, SplCols, len = 0; if((deminfo.nrows % BlockSize) > 0) { SplRows = deminfo.nrows / BlockSize + 1; } if((deminfo.ncols % BlockSize) > 0) { SplCols = deminfo.ncols / BlockSize + 1; } //计算分块高程均值,存入Block数组 int BlockNum = (SplRows * SplCols); double *Block; double Block_FC = 0, Sum = 0; Block = (double*)malloc(BlockNum * sizeof(double)); for(int m = 0; m < SplRows; m++) { for(int n = 0; n < SplCols; n++) { int count = 0; for(int i = (deminfo.nrows -1) - (BlockSize) * m; i > (deminfo.nrows - BlockSize * (m + 1)) && i >= 0; i--) { for(int j = (deminfo.ncols -1) - (BlockSize) * m; j > (deminfo.ncols - BlockSize * (m + 1)) && j >= 0; j--) { Sum += imgdata[i][j], count++; } } Block[len++] = Sum / double(count); } } //计算所有分块均值的均值 for(int i = 0; i < SplRows * SplCols; i++) { Block_FC += Block[i]; } Block_FC /= (SplRows * SplCols), Sum = 0; //计算所有分块均值的方差 for(int i = 0; i < SplRows * SplCols; i++) { Sum += pow((Block[i] - Block_FC),2); } return Sum / (SplRows * SplCols); } double MainScramble(int **imgdata1, int **imgdata2) { double org, end, scram; org = ScramblingDegree(imgdata1); end = ScramblingDegree(imgdata2); scram = 1 - end / org; return scram; }
四、效果评价
对1220X935连续置乱了三次,图像置乱度如下表:
置乱次数 | 置乱度 |
---|---|
1 | 0.3829 |
2 | 0.4617 |
3 | 0.6325 |
相关文章推荐
- 图像置乱
- 二分模板
- mysql 数据库中交换两列的值
- POJ--3264
- 前端开发中的字符编码详解
- margin使用心得
- vscode开发Typescript笔记
- hdu---1166
- pdksh-5.2.14
- Trailing Zeroes (III)(n!后有多少零+二分)
- LintCode(easy)字符串查找
- UVA 10167 Birthday Cake
- 【杭电5363】Key Set
- [置顶] Android java程序员必备技能,集合与数组中遍历元素,增强for循环的使用详解及代码
- Java 中的静态内部类
- R语言知识体系概览
- Android Layout浅析
- POJ---3468
- 微信朋友圈广告开发总结
- UINavigationController 详解