请各位帮忙!!!如何在一个image中识别一个不规则物体并计算它的面积,解决后定高分相送(500分)!急,急!(200分)

  • 主题发起人 主题发起人 蓝色步行者
  • 开始时间 开始时间

蓝色步行者

Unregistered / Unconfirmed
GUEST, unregistred user!
在系统中要对彩色图片处理,需要识别不规则物体(鼠标选中物体),并要计算出它

的面积,有什么解决的思路或方法,最好能提供源代码!用delphi.(500分)!
 
先确定边沿。
计算边缘内的象素点数。
转化成相同点数的规则图形。
计算面积


来自:yysun 时间:00-1-12 10:33:25 ID:174638
[答]
const MaxPointNum = 65535;
type
PXY = ^TXY;
TXY = record // 点的数据结构
x, y: single;
end;
XYArray = array[0..MaxPointNum] of TXY;
PXYArray = ^XYArray; // 线/面的数据结构

// 积分方法求多边形/面状图形的面积
// 多边形坐标在 xys 中,点数在 nn 中
function AreaOfPolygon(xys: PXYArray; nn: integer):single;
var ii:integer;
ss: single;
begin
ss := 0;
for ii := 0 to nn-2 do
ss := ss + (xys^[ii].y+xys^[ii+1].y) * (xys^[ii].x-xys^[ii+1].x) / 2;
result := abs(ss);
end;
 
有几个问题要弄清楚,
1.一个象素的面积是多少
2.选中物体的颜色是不是一样的
3.物体的边界是怎么确定的(假如物体的颜色不是一样的)
 
如Tassadar所言,只要选中的物体的颜色是一样的,可以用“种子填充法”(任何一本有关
图形图像的书都有介绍),正常情况下,一个像素点算面积1,填充的时候加计数器即可;
如有缩放,进行相应的比例计算。
 
to arnew: 怎样才能实现边沿检测呀!能不能给点提示!
to MikeZ: 我要处理的是人体内胃部的图像!如:病人有胃溃疡.我就要计算出胃溃疡的面积.
颜色应该相近!
本人从来没有做过这方面的工作,还是第一次,还请大家多多帮忙!小弟感激不尽!
 
像你说的用种子填充法应该可行,
依照mikeZ的方法可以做的到,难度也不大。
 
to Tassadar: "种子填充法"是用来计算面积的吗?用这种方法还需要不需要边沿检测!
 
你还是看看计算机图形学的书吧,在这里说不清楚
 
to :蓝色步行者:
Tassadar说的没错,看来你在计算机图形学方面是需要补课了。
"种子填充法"其实很简单,当然它不是用来计算面积的,不过与爱迪生计算灯泡的容积的道理是一样的。
这种方法可用两种方式实现:
1、填充部分颜色相同,则从种子点开始先向左依像素点顺序填充,直到边界(与填充颜色不同的地方),
然后向上、向右填充;上部完成后,从种子点开始向右同样填充。填充过程中计数填充的像素点数以计算面积。
2、填充部分颜色不同,但边界颜色相同,则从种子点开始填充,直到边界(与边界颜色相同的地方),
其它与填充颜色相同的相似。
我只是简单说以下,要优化你还得看点书。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部