• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

{matlab}取二值图像centroid几种方法性能比较

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

试验很简单,取二值图像的质心,三种方法做比较

1.完全采用矩阵性能不做任何循环操作,对find后的值进行除法与取余操作,从而得到centroid

2.完全采用循环操作,最简单明了

3.结合1,2,对每一列进行find,省去与除法与取余的计算时间

分析

试验证明

  • 矩阵小的情况下,2是最优的,1与3差不多是2的三倍

  • 矩阵中大情况下,三种方法时间一样

  • 当处理大矩阵时,方法3具有明显的优势,1,2差不多是3的两倍倍时间

所以我采用了方法2,简单明了,效率也可以。

测试代码

M = 9000;
N = 1700;
A = randn(M,N);
A = A>0.0;


%%%%%%%%%%%%%%%%%%%% 方法1 %%%%%%%%%%%
fprintf('\n1: ');
tic
b = find(A>0);
c = mod(b,M);
x1 = sum(c)+numel(find(c==0))*M;
y1 = sum(ceil(b./double(M)));
n1 = numel(b);

toc

%%%%%%%%%%%%%%%%%%%% 方法2 %%%%%%%%%%%
fprintf('2: ');
tic
sx = 0;
sy = 0;
n2 = 0;

for i = 1:M
	for j = 1:N
		if A(i,j) > 0
			sx = sx + i;
			sy = sy + j;
			n2 = n2 + 1;
		end
	end
end
x2 = sx;
y2 = sy;
toc

%%%%%%%%%%%%%%%%%%%% 方法3 %%%%%%%%%%%
fprintf('3: ');
tic
sx = 0;
sy = 0;

for j = 1:N
	c = find(A(:,j)>0);
	sy = sy + numel(c)*j;
	sx = sx + sum(c);
end
x3 = sx;
y3 = sy;
toc


fprintf('(%d,%d,%d),(%d,%d,%d),(%d,%d)\n',x1,y1,n1,x2,y2,n2,x3,y3);

 

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi2009之TCategoryPanelGroup[1]:ChevronAlignment等发布时间:2022-07-18
下一篇:
matlab图像处理——平滑滤波发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap