图像匹配难题

shines77 2003-08-19 05:25:50
图片是变的,但有些规律,

两张图片都是由同一个图像源(真实大小)缩放而来,而且只是源图的
很小的一部分,

但是两张图片,起始坐标会相差1-2个像素(不确定),而且长和宽会相差1-2个像素(也不确定,是用GDI函数缩放的结果)。

表面上看非常相似,但取像素是不可能完全一致的,不知道该如何比较。
...全文
207 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
shines77 2003-08-31
  • 打赏
  • 举报
回复
对不起,一直没时间试,先给分了
shines77 2003-08-22
  • 打赏
  • 举报
回复
谢谢XCOOL(芯酷),我做个试验看看。
ly60269 2003-08-22
  • 打赏
  • 举报
回复
这种匹配算法的速度和准确率大概是多少?请给出分辨率。

谢谢
XCOOL 2003-08-21
  • 打赏
  • 举报
回复
但是相关系数就不一样,配准图像的相关系数绝对是最大的,因为相关系数越大用最小二乘法进行函数拟合时候回归误差最小。
XCOOL 2003-08-21
  • 打赏
  • 举报
回复
我上面说的核心理论,不是松弛法的核心理论而是相关系数法的核心理论。松弛法是目前最有效果的图像匹配方法,它用再你现在的这个问题有点大材小用了,而且松弛法算法的效率是非常慢的,比上面的方法要慢的多。

取绝对误差的方法不妥,因为经过缩小的图片,放大后有些像素已经丢失或被周围的像素取代或改变,即使配准的图像他们间的绝对误差未必是最小的。
XCOOL 2003-08-21
  • 打赏
  • 举报
回复
这已经是最快的方法了,用绝对误差方法不好的!
shines77 2003-08-21
  • 打赏
  • 举报
回复
To XCOOL(芯酷):
你的第一种方法大致了解了,但是总觉得用乘法太慢,如果两图大小一样,还不如求最小绝对误差快,用减法取绝对值。
第二种,用松弛匹配法,难道a,b的值也要像第一种方法那样试吗??

谢谢你的提示,我找不到图像方面的书,搜到很多都下不了:(
XCOOL 2003-08-21
  • 打赏
  • 举报
回复
上面的方法的关键是取原图像某部分进行缩放时候,取景口的长宽是否一致,如果一致可以用以上的方法,否则如果对原图像的取景口大小不一致那么,用松弛匹配法。不过这个方法说出来有点罗嗦,你去看看图像处理方面的书。还有就是把原取景口的大小也作为参数用上面相似的方法求相关系数。最终求到,(x,y,w,h)使得相关系数最大的参数值。

这些方法的核心理论是:如果有两个函数,f(x),g(x),f(x) 同 g((x-a)/b),看上去最接近,现在未知道a,b,那么存在a1,b1使得 [积分符号]f(x)*g((x-a1)/b1) 最大的a1,b1就是使得f(x)和g((x-a)/b)最接近的参数a,b.
XCOOL 2003-08-21
  • 打赏
  • 举报
回复
我开始说,吧他们缩放到同一个大小然后求匹配呀,虽然由于图像经过缩小后,再放大,他的像素颜色会改变,有些缩小后;一个点的像素是用的原图像中一个小块内很多像素的平均值但是,现在图像和原来图像整体的统计关系是不会改变的。两个经过原图像中某一部分缩小放大而来的图像,你可以以其中某一幅图像的长宽为标准,把另外一幅图像缩放到同样的长宽下面。就可以根据,信号处理中,相关系数最大的信号最相似的原理求他们的匹配。
这个方法关键的一点是要求,图像重合的区域比较大。还有上面方法有点问题,现在改进如下:
int XianGuan(int x,int y)
{
int s,m,n;
s=0;
for(m=0;m<w_a;m++)
{
for(n=0;n<h_a;n++)
{
if(m+x>=0 && m+x<w_a)
{
if(n+y>=0 && n+y<h_a)
{
s=s+A(m,n)*B(m+x,n+y);
}
else
{
s=s+A(m,n)*B(m+x,n+y-h_a)
}
}
else
{
if(n+y>=0 && n+y<h_a)
{
s=s+A(m,n)*B(m+x-w_a,n+y);
}
else
{
s=s+A(m,n)*B(m+x-w_a,n+y-h_a);

}
}
}
}
return s;
}
才对
shines77 2003-08-20
  • 打赏
  • 举报
回复
to XCOOL(芯酷):
图像不仅仅只是偏移啊,还有大小缩放,看来你是没看明白我的意思。
如果只是求偏移量,那我从头开始搜索就行了,如果像素都是一样的话。
不过,也许是我没看懂你的意思,问题是我不知道A,B两图的缩放大小差多少?不可确定
shines77 2003-08-20
  • 打赏
  • 举报
回复
XCOOL 2003-08-20
  • 打赏
  • 举报
回复
也就是说:如果原来的图像是A(w_a,h_a),变换后的图像缩放到原来图像的大小为B(w_a,h_a)(或者把两幅图像都归一化,变成A'(0..1,0..1),B'(0..1,0..1)),然后对可能的位移范围-c<x<c,-d<y<d,中x,y可能取值得每个整数x,y,求:
int XianGuan(int x,int y)
{
int s,m,n;
s=0;
for(m=0;m<w_a;m++)
{
for(n=0;n<h_a;n++)
{
s=s+A(m,n)*B(m+x,n+y);
}
}
return s;
}

(A(x1,y1)B(x2,y2)为图像的像素值)

对于给定的每个满足条件的位移x,y求使XianGuan(x,y)最大的时候的那个x,y
这个x,y就是变换后的图像相对于原图像的位移,对于旋转后的图像同理。
不过要多一个旋转角Seta,或者变换到频域计算。

要给分哈!
不过我现在对分已经不感冒了只是偶尔来自己熟悉的老板块看看。但是给分是一定要接的!
XCOOL 2003-08-20
  • 打赏
  • 举报
回复
这个问题对每一个位移x,y,求两幅图像的2D相关系数,因为他们之间有线性关系,相关系数最大的那个位移值x,y就是经过移动后的图像移动的位移。
shines77 2003-08-19
  • 打赏
  • 举报
回复
不知道,偏差是不可控制的
shines77 2003-08-19
  • 打赏
  • 举报
回复
to happy__888:
你说的统计数据指的是什么?灰度直方图吗?还是?
HUNTON 2003-08-19
  • 打赏
  • 举报
回复
不确定?那当然就一定有偏差了,你知道什么时候是1个象素,什么时候是2个象素么?
shines77 2003-08-19
  • 打赏
  • 举报
回复
看起来不是很难,但不知道如何入手,因为缩放都会有些失真,造成比较很困难。
寻开心 2003-08-19
  • 打赏
  • 举报
回复
图像缩放以后,象素差距也许会很大,但是统计数据变化比较小,可以先从这里入手。
zzwu 2003-08-19
  • 打赏
  • 举报
回复
如已经过了缩小(或放大)就麻烦了,如果只是截取其中一小块,还可以利用搜索和匹配方法试.

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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