声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 8588|回复: 34

[图像处理] 请问怎么求这个图片的形心和最小外接矩形框啊

 关闭 [复制链接]
发表于 2007-10-16 10:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请问怎么求这个图片中人体的形心和最小外接矩形框啊,并把它们在图上标出来,拜托啊~~
b.JPG
回复
分享到:

使用道具 举报

发表于 2007-10-16 11:50 | 显示全部楼层
请搜索版面,之前讨论过类似的问题

[ 本帖最后由 ChaChing 于 2010-4-18 11:54 编辑 ]
 楼主| 发表于 2007-10-16 12:24 | 显示全部楼层
可是没有给出程序啊  麻烦你给出具体的程序可以吗
发表于 2007-10-16 12:29 | 显示全部楼层
你觉得这个程序很容易写出来么?
思路都是一样,有了思路才好写程序。何况这种问题也没有通用的程序,都是需要加些经验的成分在里边。之前论坛有一个求杯子里水高度的问题。看看别人的思路,自己慢慢摸索吧。

[ 本帖最后由 ChaChing 于 2010-4-18 15:22 编辑 ]
发表于 2007-10-16 12:35 | 显示全部楼层


help find

请多看看本版各个置顶帖,指望别人代替你完成所有东西根本不现实

[ 本帖最后由 eight 于 2007-10-16 12:52 编辑 ]
 楼主| 发表于 2007-10-17 10:25 | 显示全部楼层
求形心的这么写好像不可以啊,版主帮忙看一下啊
im=imread('b.bmp'); [m,n]=size(im); sumxc=0; sumyc=0; sum=0;
for i=1:m, for j=1:n
  if pic(i,j)>0
    sumxc=sumxc+pic(i,j)*i; sumyc=sumyc+pic(i,j)*j; sum=sum+pic(i,j);
  end
end; end
xc=sumxc/sum; yc=sumyc/sum;
figure,imshow(im); hold on; plot(xc,yc,'r+');

[ 本帖最后由 ChaChing 于 2010-4-18 15:31 编辑 ]
公式.JPG
发表于 2007-10-17 10:51 | 显示全部楼层
读取出来的 im 就是图像的像素值,pic 是什么东西?

基本思想是这样子,不过在 matlab 里面,用循环做的话很慢的。建议看看置顶帖,如何进行矢量化编程

[ 本帖最后由 ChaChing 于 2010-4-18 15:24 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2007-10-17 12:07 | 显示全部楼层
哦  忘了改了  pic应该改成im,可是也不对啊

这个结果出来的不是人体的形心啊,到底哪错了呢

[ 本帖最后由 eight 于 2007-10-17 14:59 编辑 ]
发表于 2007-10-17 13:59 | 显示全部楼层
不要死套公式,那样肯定是有问题的

可以考虑这样做:找出白像素对应的所有坐标,求出所有x和y的平均值。作为行心的坐标,这样误差应该是可以接受的。

个人意见仅供参考

[ 本帖最后由 ChaChing 于 2010-4-18 15:26 编辑 ]
发表于 2007-10-17 15:16 | 显示全部楼层
这个问题以前好象讨论过: 先用edge求出轮廓,再求轮廓各点坐标,然后求形心(坐标的平均).
发表于 2007-10-17 15:21 | 显示全部楼层
原帖由 xjzuo 于 2007-10-17 15:16 发表
这个问题以前好象讨论过: 先用edge求出轮廓


其实用 find 也是可以的。这个问题之前的确讨论过,好像是飞机模型,现在只不过换了人体而已,建议楼主翻一下旧帖
 楼主| 发表于 2007-10-17 15:45 | 显示全部楼层
我不知道这两个函数啊~以前确实有过飞机模型的那个,可是没讨论出结果来啊
发表于 2007-10-17 16:20 | 显示全部楼层
原帖由 axz707 于 2007-10-17 15:45 发表
我不知道这两个函数啊~以前确实有过飞机模型的那个,可是没讨论出结果来啊

不太可能啊,没见过以前的讨论。是按照我前边的思路,用eight说的find做的。
  1. clear,clc;
  2. I=imread('person.jpg');
  3. I=rgb2gray(I);
  4. BW=im2bw(I,graythresh(I));
  5. [M N]=size(BW);
  6. [rows,cols,vals]=find(BW);
  7. x=round(mean(cols));y=round(mean(rows));
  8. imshow(BW),hold on;axis on
  9. text(x,y,'\heartsuit','Color','red','fontsize',20);
  10. x=sort(cols);y=sort(rows);
  11. rectangle('Position',[x(1),y(1),x(end)-x(1),y(end)-y(1)],...
  12.           'LineWidth',2,'Edgecolor','b');
复制代码

效果还凑合,可能形心会有误差
temp.PNG

评分

1

查看全部评分

 楼主| 发表于 2007-10-17 16:55 | 显示全部楼层
哈哈    谢谢谢谢!!!!:lol
发表于 2007-10-17 16:55 | 显示全部楼层

回复 13楼 花如月 的帖子

形心不正确是否没有乘以坐标位置了?估计 vals 是要与 cols 和 rows 相乘的

[ 本帖最后由 ChaChing 于 2010-4-18 15:38 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-9 21:00 , Processed in 0.069269 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表