% 计算图像平面上区域的矩 % 参考:《图像工程(中册)图像分析》P240 % f 输入二维图像(函数) % (p,q) 需要计算的阶数 % 返回: % 函数 f(x,y) 的 p+q 阶矩 function [moment]=CalculateMoment(f,p,q) [xSize,ySize]=size(f); % 计算横纵范围 f=double(f); % 类型抓换 moment=0.0; tic testtimes=10000; % 测试次数 for mm=1:testtimes for x=1:xSize for y=1:ySize moment=moment+(x^p)*(y^q)*f(x,y); % 计算代码 end end end moment=moment/testtimes toc
输出为:
moment = 1.2885e+003
Elapsed time is 12.563000 seconds.
第二种方式,采用矩阵运算实现:
testtimes=10000; for mm=1:testtimes xMatrix=zeros(xSize,ySize); yMatrix=zeros(xSize,ySize); for i=1:xSize xMatrix(i,:)=i; end for j=1:ySize yMatrix(:,j)=j; end moment=sum(sum((xMatrix.^p).*(yMatrix.^q).*f));% 计算矩 end toc
输出为:Elapsed time is 5.907000 seconds.
花费时间不到前面的一半。
倘若把内存分配与初始化工作放到循环测试的外边,即
xMatrix=zeros(xSize,ySize); yMatrix=zeros(xSize,ySize); for i=1:xSize xMatrix(i,:)=i; end for j=1:ySize yMatrix(:,j)=j; end testtimes=10000; for mm=1:testtimes moment=sum(sum((xMatrix.^p).*(yMatrix.^q).*f));% 计算矩 end toc