先说明一个错误:64*64的图像分块(每块4*4)应该是256块,不是16块。
下面是程序
设A是64*64的图像矩阵
B=mat2cell(A,4*ones(1,16),4*ones(1,16));
B=reshape(cat(3,B{:}),16,[]);%B就是要的矩阵,16行256列
%下面是说明
%大概的关系是这样的,设A=
%A1 A17 … A241
%A2 A18 … A242
%∶ ∶ ∶
%A16 A19 … A256
%(这里每个Ai都是4*4的矩阵块)
%那么B=
%B1 B2 B3 … B256
%每个Bi就是对应Ai的16*1列向量
%
%即假设Ai=
%a1 a5 a9 a13
%a2 a6 a10 a14
%a3 a7 a11 a15
%a4 a8 a12 a16
%
%那么Bi=
%a1
%a2
%∶
%a16
在MATLAB中把一个矩阵等分成几个维数相等的矩阵的方法:
利用reshape函数:在command window下输入:doc reshape。
MATLAB简介:
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
%假设你原有的矩阵是存在变量 in 中
a=nchoosek(1:20,16);%产生20各种取16个的组合,会有4845种,返回一个4845x16的矩阵
num=size(a,1);%num=4845
choose=true(num,1);
for ii=1:num
temp=in(a(ii,:),:);%取第ii行的组合,形成temp方阵
d=det(temp);%计算行列式
if d==0 %如果计入计算截断误差,可以用条件abs(d) choose(ii)=false; %标记行列式为0的组合 end end chooseout=a(choose,:);%chooseout是nx16的矩阵,n为符合条件的矩阵个数 %可用out=in(chooseout(n,:),:),获得第n个符合条件的矩阵
以上是使用MATLAB进行图像分块处理的详细内容。更多信息请关注PHP中文网其他相关文章!