如何设计这个图象分析算法?(300分)

  • 主题发起人 主题发起人 坏蟑螂
  • 开始时间 开始时间

坏蟑螂

Unregistered / Unconfirmed
GUEST, unregistred user!
目的:检测一张白纸上是否有一根黑(灰)线

麻烦:
1.由于点光源照明,纸上有明显亮暗梯度,即四角较暗;
2.有噪声点;
3。有阳光影子;
4。每个象素值昼夜变化较大;
5。线宽不定;
6。线中有少量白点;

由于不是学图象处理出身的,基础理论不足,所以诚心求教。
如果得高人指点,拨云见日,愿再送1000分,(一个问题极限300分)。
 
没有完全准确的方法。

你可以先把几个特殊时间段的几个有线的特征图象存下来,再比较,设定一定差值范围内为相同有线
 
检测白纸上是否有黑线,你可以利用图象的异或来实现。将原图设为bmp1,新建的位图为bmp2,
bmp2为全白;如果有,则结果为 :最后的位图上有一条白线;否则,最后的位图为全黑。

procedure TForm1.Button1Click(Sender: TObject);
var
Bmp1,Bmp2 :TBitmap;
begin
Bmp1 :=TBitmap.Create;
Bmp1.LoadFromFile('e:/图片/end004.bmp');
Bmp2 :=TBitmap.Create;
Bmp2.Width :=Bmp1.Width;
Bmp2.Height :=Bmp1.Height;
Bmp2.PixelFormat :=Bmp1.PixelFormat;
Bmp2.Canvas.FillRect(Bmp2.Canvas.ClipRect);
BitBlt(Bmp2.Canvas.Handle,0,0,Bmp2.Width,Bmp2.Height,Bmp1.Canvas.Handle,0,0,SRCINVERT);
Image1.Picture.Bitmap.Assign(Bmp2);
Bmp1.Free;
Bmp2.Free;
end;
 
可是,检测白线和检测黑线有什么区别呢?
 
OK,我绝对相信你!而且非常感谢你的帮助!

我的Matrox Metero II型图象采集卡连着4个摄像头,
一天24小时不间断抓图,图是一张白纸,上面有根薄
金属窄条,一面白,一面黑,正常时白面向上,和纸
的颜色基本一样,出错时黑面向上或断裂。
我能通过Matrox的库函数得到此图象,我必须在出错时
报警。
 
这种图像识别相对而言还是比较简单的,主要用以下几步:

256阶灰度化
平滑
2值化(阈值比较麻烦)
用4-连通或8-连通腐蚀
再用4-连通获得图像边界
最后可以判断一下,如果有个边界特别长,而且又特别窄,就是有线了
 
谢谢青萍!
有劳您老帮人帮到底,送佛送上天,请在指点几句:

1。平滑是否就是用周边的点的平均值代替中间点?
2。由于此图99.9x%都是白点,设定二值化阈值非常困难,
而且由于昼夜变化,阈值又不能固定,应该怎么设呢?
3。能详细说说“连通腐蚀”和“搜索边界”的算法吗?

谢谢!!
 
可不可以用恒定的灯光来使它昼夜变化减小.
只要减小了昼夜变化,判断就应该不成问题了.
 
对,我确实用了很厚很厚的窗帘,
也用了大功率的灯,但这只能消除阳光的影子,
却无法避免昼夜的影响,太阳公公实在太强大了,
何况我的客户也不可能允许我将他们的车间完全封起来。
 
卷起千堆雪tyn是公认的高手。
青萍:这里为什么要做平滑处理?
我能想到的笨办法:
1)先去掉那些灰度变化平缓的点
2)二值化
3)判断哪里有线段的图元:
水平扫描每一行,记录有连续非背景色的点的区域。
比较连续行的这些点区域。
如果有水平相交的,就可以认为是在一条线段上,然后记录下面一行和上面一行的并集和连
续的行区域(用这个水平方向的区域指和连续行区域可以算出它所代表的线段的长度)。如
果上一行中的某个区域和下一行的所有区域不水平相交。且它从属的线段长度小于阀值就放弃。
相反,如果长度符合条件,它就是你要的线段。
 
有没有图象处理学的标准算法呢?
 
尽管大家回答没有直接帮上我,
但确实给了我很多启示,特别是
g622和青萍。

问题搞定了,谢谢大家!!!
 
卷起千堆雪tyn:
在一个图象处理的项目种遇到了问题,希望能向您请教。
g622@xanet.edu.cn
急盼!
 
后退
顶部