lezilisy 2022-07-19 23:01 采纳率: 42.9%
浏览 27
已结题

[图像置乱]正弦映射的混沌变换原理是什么?

在阅读文献的时候,提到了一种图像置乱的通用方法,即正弦映射混沌变换,其公式和原理如下:

img

我的理解是:通过初值x0进行正弦映射的迭代,得到一连串的xn,将xn乘以(K-1)再取整,就变成了一个[0,K-1]范围内的整数,K为图像的长和宽的乘积。从原图的第一个像素进行迭代,利用得到的一个一维的整数数组,第i个位置的整数就是第i个像素的新位置。然后根据新位置进行位移即可对图像置乱。

当然,迭代得到的整数可能会有重复,因此我创建一个新的数组,记录每个像素是否已经对应一个新位置(新整数)。我用MATLAB进行实验,代码如下:

x0=input('请输入初值x0:');
L=input('请输入舍弃的次数L:');

K=h*w;
% 不重复的小数集合
x=zeros(1,K+L);
% 最终的整数集合
xn=zeros(1,K);
% 记录在哪个位置上还没有计算到
tag=zeros(1,K);
x(1)=x0;
i=1;
flag=0;
while sum(tag)~=K 
    next=0.999*sin(pi*x(i));
    t=floor(next*K);
    
    if i>L
        if tag(t)==0
            tag(t)=1;
            i=i+1;
            
            x(i)=next;
            xn(i-L)=t;
        else
            x(i)=next;
        end
    else
        i=i+1;
        x(i)=next;
    end
    flag=flag+1;
end

代码中的h和w分别是图像的长和高,即696×696,初值x0=0.666,舍弃数量L=10.我没有运算完,差不多运行了20分钟,结果如下:

img

结果表明,循环了425万次,其中新位置不重复的只有46万多个,总共需要对48万多个像素进行置乱,还是没有对每个像素都映射到新的位置。
所以我的思路不是一一映射,而且运行效率极低,说明并不对,因此我想问正确的正弦映射混沌变换的思路是什么?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 7月24日
    • 赞助了问题酬金5元 7月21日
    • 创建了问题 7月19日

    悬赏问题

    • ¥30 python密码表示
    • ¥15 Flask应用部署到阿里云服务器失败,无法访问网页,问题出在哪里?
    • ¥15 计算个体的IBS遗传距离
    • ¥15 有什么好的直流步进减速电机42的厂家推荐,保持力矩达到0.3N.M
    • ¥15 一道蓝桥杯的题,请问我错在哪里
    • ¥15 关于#android问题,xposed模块找不到so
    • ¥15 UE5.4.2创建C++项目成功,但是编译失败
    • ¥15 华为手机备份nas,airdisk,遇到的空间不足问题。求个详细的解决方案。
    • ¥20 Cknife无法使用
    • ¥15 这个结构体为什么会出错呢?