图像置乱之评价图像置乱度算法的选择

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wkl115211/article/details/52004679

一、图像置乱度
所谓“图像置乱”,就是将图像的信息次序打乱,将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

因此可以用次算法座位图象置乱度评价方法。

展开阅读全文

没有更多推荐了,返回首页