IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 一些图像置乱算法matlab -> 正文阅读

[数据结构与算法]一些图像置乱算法matlab

因为犯懒,久未更新,抱歉!

接下来会在此篇文章中持续更一些常用的置乱算法,感兴趣的可以关注一下。

主要来源于网络再整理,基本亲测有效。

这部分的原理不明白的同学,可以去搜一下别的博主写的文章或者找相关论文阅读。看不懂代码的同学可以先研究一下注释,跑不通代码的同学可以先检查一下报错的问题是什么。其他问题可在评论区留言!

之前有私信问过我直接复制粘贴到matlab怎么跑不通,注意这里提供的是函数,需要你自己导入相关变量后去引用才能跑通!这部分不懂的同学建议去借一本《MATLAB R2020a 完全自学一本通》或者《数字图像处理(MATLAB版)》,以学习一些matlab基础知识。

1、zigzag置乱

注意:只适用于行列相等的图。

正变换:

function B = Zigzag(A)
% zigzag正变换
[r,c] = size(A);
if r ~= c
    error('input array should have equal number of rows and columns')
end
N = r;
len = N*N;
B = zeros(1,len);                                                     % zigzag排序后的数组
B(1) = A(1);
k = 1; 
i = 1; j = 1;                                                              % 起始坐标
d = 1;        % 排序的方向标示。值为1表示下一个元素在右上方向;值为-1表示下一个元素在左下方向
flag = 1;     % 上下三角标示。值为1表示当前元素在上三角;值为0表示当前元素在下三角
while k < len
       if flag == 1                                % 当前元素为上三角
        if i ~= 1 && j ~= 1                                                % 非边界元素
            if d == 1                              % 下一个元素在右上方向
                i = i-1; j = j+1;
            else                                   % 下一个元素在左下方向
                i = i+1; j = j-1;
            end
        else
            if i == 1                                                      % 上边界                
                if d == 1                                                  % 需要变向
                    j = j+1; d = -1;
                else                                                       % 不需要变向
                    i = i+1; j = j-1;
                end
                
            else
                if j == 1                                                  % 左边界
                    
                    if d == 1                                              % 不需要变向
                        i = i-1; j = j+1;
                    else                                                   % 需要变向
                        i = i+1; d = 1;
                    end               
                end
            end
        end
       else                                                % 当前元素为下三角的时候
        if i ~= N && j ~= N
            if d == 1
                i = i-1; j = j+1;
            else
                i = i+1; j = j-1;
            end
        else
            if i == N
                if d == 1
                    i = i-1; j = j+1;
                else
                    j = j+1; d = 1;
                end
            else
                if j == N
                    if d == 1
                        i = i+1; d = -1;
                    else
                        i = i+1; j = j-1;
                    end
                end
            end
        end
       end
    if j == N         % 若元素到达了右边界,说明上三角元素已经遍历完,开始遍历下三角元素
        flag = 0;
    end    
    k = k+1;
    B(k) = A(i,j);
end

逆变换:

function B = iZigzag(A)
% zigzag逆变换
len = length(A);
N = sqrt(len);
if N ~= fix(N)
    error('input array should have equal number of rows and columns')
end
B = zeros(N,N);                                                     % zigzag排序后的数组
B(1) = A(1);
k = 1; 
i = 1; j = 1;                                                              % 起始坐标
d = 1;       % 排序的方向标示。值为1表示下一个元素在右上方向;值为-1表示下一个元素在左下方向
flag = 1;    % 上下三角标示。值为1表示当前元素在上三角;值为0表示当前元素在下三角
while k<len
    if flag == 1                                                       % 当前元素为上三角
        if i ~= 1 && j ~= 1                                                % 非边界元素
            if d == 1                                            % 下一个元素在右上方向
                i = i-1; j = j+1;
            else                                              % 下一个元素在左下方向
                i = i+1; j = j-1;
            end
        else
            if i == 1                                                      % 上边界                
                if d == 1                                                  % 需要变向
                    j = j+1; d = -1;
                else                                                       % 不需要变向
                    i = i+1; j = j-1;
                end
            else
                if j == 1                                                  % 左边界
                    if d == 1                                              % 不需要变向
                        i = i-1; j = j+1;
                    else                                                   % 需要变向
                        i = i+1; d = 1;
                    end
                end
            end
        end
    else                                               % 当前元素为下三角的时候
        if i ~= N && j ~= N
            if d == 1
                i = i-1; j = j+1;
            else
                i = i+1; j = j-1;
            end
        else
            if i == N
                if d == 1
                    i = i-1; j = j+1;
                else
                    j = j+1; d = 1;
                end
            else
                if j == N
                    if d == 1
                        i = i+1; d = -1;
                    else
                        i = i+1; j = j-1;
                    end
                end
            end
        end
    end
    if j == N            % 若元素到达了右边界,说明上三角元素已经遍历完,开始遍历下三角元素
        flag = 0;
    end    
    k = k+1;
    B(i,j) = A(k);
end

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:20:57  更:2022-05-08 08:23:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:28:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码