一个比较复杂的问题,如何比较图象的不同。

foxnt 2003-09-26 12:52:27
要比较两个实时拍摄回来的图象的不同。
当然可以直接做内存比较,但是那样太敏感了。因为两个图画在拍的时候,可能因为外界如阳光变暗了点。虽然那样人眼是分析不出来的,可是内存比较却一下就比较出来了。但我不是要那样的结果。:( 我要有明显不同时,比如第二幅画里跑了个人进去,那样才算有不同。
各位,知道怎么做这样的分析吗?现在外面有很多这样的东西,比如摄象机,平时放在那里,一有个人走过去,摄象机就会自动跟着你转。给点思路吧,以前没做过这种东西。:(
...全文
31 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanfyj 2003-09-26
  • 打赏
  • 举报
回复
变成二值图象来处理怎么样?
eastsun 2003-09-26
  • 打赏
  • 举报
回复


同态滤波后相减就可以。

然后再进行判断。
孤必有邻 2003-09-26
  • 打赏
  • 举报
回复
这种比较好象是这样处理的:
因为光线的变化对图像的色度改变大,而对灰度影响很小,利用这一点,将图像分块(8X8像素),灰度/色度分离,然后只对灰度进行比较处理,(至于比较的合理性,取决于进一步的算法)
--以上方法来自JPEG图像压缩(保留灰度,丢失色度)

灰度/色度分离代码:针对24位图像8x8像素块(其中Y为灰度,U/V是两个色度)
参数ibuf事像素区指针,width图像像素宽度(主要是想提供代码中的计算常量)
/*将RGB数据转换成YUV格式*/
void Convert(unsigned char*ibuf,unsigned int width)
{
int i,j;
unsigned char ybuf[64];
unsigned char bbuf[64];
unsigned char rbuf[64];
// 8x8 编码
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
ybak[i*8+j]=(ybuf[i*8+j] = 0.2990 * ibuf[(i*width+j)*3+0] + 0.5870 * ibuf[(i*width+j)*3+1] + 0.1140 * ibuf[(i*width+j)*3+2] + 0.49999);
bbak[i*8+j]=(bbuf[i*8+j] =-0.1687 * ibuf[(i*width+j)*3+0] - 0.3313 * ibuf[(i*width+j)*3+1] + 0.5000 * ibuf[(i*width+j)*3+2] + 128.0 + 0.49999);
rbak[i*8+j]=(rbuf[i*8+j] = 0.5000 * ibuf[(i*width+j)*3+0] - 0.4187 * ibuf[(i*width+j)*3+1] - 0.0813 * ibuf[(i*width+j)*3+2] + 128.0 + 0.49999);
}
}
suwenk 2003-09-26
  • 打赏
  • 举报
回复
两个图像相减,然后进行分析。
我觉得这个思路比较合理。不然好像没什么办法。
s6283 2003-09-26
  • 打赏
  • 举报
回复
用直方图匹配试试

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧