zigzag模式提取矩阵元素
zigzag模式提取矩阵元素
zouxy09@qq.com
http://blog.csdn.net/zouxy09
这节博文只是为了上传个代码而已。希望对需要的人有用。zig-zag模式如下图所示。它可以用来按照以下的顺序来提取一个矩阵的元素。
这个东西用在哪呢?用在离散余弦变换的系数提取里面。离散余弦变换(DCT)是种图像压缩算法,JPEG-2000好像就是用它来进行图像压缩的。DCT将图像从像素域变换到频率域。然后一般图像都存在很多冗余和相关性的,所以转换到频率域之后,只有很少的一部分频率分量的系数才不为0,大部分系数都为0(或者说接近于0),这样就可以进行高效的编码,以达到压缩的目的。下图的右图是对lena图进行离散余弦变换(DCT)得到的系数矩阵图。从左上角依次到右下角,频率越来越高,由图可以看到,左上角的值比较大,到右下角的值就很小很小了。换句话说,图像的能量几乎都集中在左上角这个地方的低频系数上面了。
而且,系数的重要性一定程度上是按照zigzag模式进行排列的。所以就可以通过zigzag模式来提取这个矩阵前面的重要性的元素,作为这个图像在频率域上的特征,然后可以拿去做分类啥的,以达到降维的功效。
具体代码如下:
zigzagCoder.m
function dctVector = zigzagCoder(A, needNumCoefficient)
%// Select elements of a square matrix using zig-zag pattern
%// Author : zouxy
%// Date : 2013-10-28
%// HomePage : http://blog.csdn.net/zouxy09
%// Email : zouxy09@qq.com%% input: A : square matrix
%% needNumCoefficient : how many coefficient you want to maintain
%% output: dctVector: vector contain coefficients by colif size(A, 1) ~= size(A, 2)display('Warning: your matrix should be square!');if size(A, 1) > size(A, 2)A = A(1:size(A, 2), 1:size(A, 2));elseA = A(1:size(A, 1), 1:size(A, 1));endendif needNumCoefficient > (size(A, 1) * size(A, 2))needNumCoefficient = size(A, 1) * size(A, 2);endA = A';count = 1; for dim_sum = 2 : (size(A, 1) + size(A, 2))if mod(dim_sum, 2) == 0for i = 1 : size(A, 1)if dim_sum - i <= size(A, 1) & dim_sum - i > 0dctVector(count) = A(i, dim_sum - i);count = count + 1;endendelsefor i = 1 : size(A, 1)if dim_sum - i <= size(A, 1) & dim_sum - i >0dctVector(count) = A(dim_sum - i, i);count = count + 1;end end endenddctVector = dctVector(1:needNumCoefficient);dctVector = dctVector';end
例如:
testZigzagCode.m
mat = [1 2 6; 3 5 7; 4 8 9];
num = size(mat, 1) * size(mat, 2);
code = zigzagCoder(mat, num);
disp(mat);
disp(code');
输入方阵:
1 2 6
3 5 7
4 8 9
输出向量:
1 2 3 4 5 6 7 8 9
zigzag模式提取矩阵元素相关推荐
- matlab取矩阵元素的模,matlab – 提取矩阵元素
冈瑟已经走上了正轨.您想要选择一个元素if >非零的行cumsum是1 AND >非零的列cumsum是1 AND >元素本身不为零. 以下代码解决了这个问题: A = [0, 0, ...
- Zig-Zag模式填充矩阵
描述 在一个mn的数组中,按照Zig-Zag的顺序依次填写1,2,3,-mn. 输入 两个整数m,n表示m*n的矩阵,整数间以空格隔开.2<=m,n<100 输出 输出矩阵 样例1 输入 ...
- python提取矩阵元素_python-如何获取矩阵中某个元素周围的所有...
如果您不关心效率,请使用scipy: import scipy, scipy.ndimage def nb_vals(matrix, indices): matrix = scipy.array(ma ...
- python提取矩阵元素_python获取array中指定元素的示例
python获取array中指定元素的示例 对于array,如2-D的array,如何取指定元素 设array为3*10的shape s = array([[ 0, 1, 2, 3, 4, 5, 6, ...
- 从矩阵中提取对角线元素;将一维数组转换为对角线矩阵:np.diag()函数
[小白从小学Python.C.Java] [计算机等级考试+500强双证书] [Python-数据分析] 从矩阵中提取对角线元素 将一维数组转换为对角线矩阵 np.diag()函数 选择题 下列说法错 ...
- MATLAB提取矩阵中的一部分
MATLAB对矩阵的操作十分灵活,下面对最近遇到的进行总结: 格式A(m,n),用于提取矩阵A中符合m,n要求的部分 1.提取某个元素,则m,n为数字标量,如A(2,3)为第二行第三列的元素. 2.提 ...
- Matlab提取矩阵行数与列数
一.概述 Matlab提取矩阵行数与列数主要用到size()这个函数 二.详解 1. t=size(T); 只用一个参数接受结果时,size返回一个行向量,第一个元素代表行数,第二个元素代表列数. 2 ...
- matlab 矩阵 列 逆序,matlab对矩阵/向量的常用操作(拼接矩阵、向量逆序、改变矩阵形状、求行阶梯形矩阵、提取矩阵的一部分等)...
几乎所有变量在matlab中都可以视为矩阵(1 x 1元素,1 x n向量,m x n矩阵等),matlab中对矩阵/向量的操作非常多,个人认为对矩阵的操作是体现matlab功底的地方:灵活搭配使用这 ...
- MATLAB提取矩阵一部分
MATLAB对矩阵的操作十分灵活,下面对最近遇到的进行总结: 格式A(m,n),用于提取矩阵A中符合m,n要求的部分 1.提取某个元素,则m,n为数字标量,如A(2,3)为第二行第三列的元素. 2.提 ...
最新文章
- 修改闭包内使用的外部变量
- java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
- 【渝粤题库】陕西师范大学202012 刑事诉讼法专论 作业
- 生产环境下的负载均衡配置
- 8086汇编语言实现8253计时器对时且实时定点显示时间(全注释)
- 0基础学python有多难-0基础纯小白学Python,请注意这2个坑
- python 输出颜色的设置
- git tag标签操作
- 【C++】常用算数生成算法
- C++——WebServer服务器项目
- 城市级智能网联招投标项目情况全扫描(2021版)
- 关闭apache自动目录列表功能的三种方法
- 3717 bLue的文件查找器
- Android 字体自适应屏幕的方法
- android蓝牙设备类型设置 dev class设置
- 程序员日常照片大合集!快来大饱眼福!
- 微信小程序开发(六)——服务器
- 利用计算机求解一个实际问题的步骤是,数学在计算机科学的应用.doc
- python中的super是什么?
- PostgreSQL的psql中的AutoCommit