ssd算法怎么判断图像匹配算法的好坏

4441人阅读
matlab 图像处理
这里要求用我们自己计算得到的视差图和给的视差图作比较来比较我们得到的视差图的好坏程度,我视差图返回的值是计算得到的视差乘以3之后的图,所以在计算时我不是两个值相差大于1,而是大于3,因为两个图像都乘3了,所以要大于3,我传入的参数是两个图像的矩阵,因为我是写了一个脚本咯跑所有测例的,在脚本里边已经把图像读出来了
&span style=&font-size:18&&function [percentnumberbadpixels] = PercentBadPixels(mydisparitymap,groundtruthdisparitymap)
mydisparitymap = double(mydisparitymap);
groundtruthdisparitymap = double(groundtruthdisparitymap);
[Rmydisparitymap, Cmydisparitymap] = size(mydisparitymap);
numbadpixels = 0;
for i = 1:Rmydisparitymap
for j = 1:Cmydisparitymap
if (abs(mydisparitymap(i,j) - groundtruthdisparitymap(i,j)) & 3)
numbadpixels = numbadpixels+1;
percentnumbadpixels = numbadpixels/(Rmydisparitymap*Cmydisparitymap*1.0);
percentnumbadpixels = floor(percentnumbadpixels*100);
str = strcat(num2str(percentnumbadpixels),'%');
percentnumberbadpixels =
&&左视差图
& 右视差图
实现细节:
&&&输入的图像是24位的图像,但是这些计算都是基于强度(intensities)来计算的,在matlab中把彩色图转为灰度图的函数rgb2gray实质上就是转为其强度灰度图像。
对于同一图像,左眼看到的图像相对于右眼看到的图像的位置是不一样的,如上图,对于相同位置在右眼看到的图像的位置在左眼看到的图像的位置的前边,所以左视差图和右视差图的搜索方法不同,对于左视差图:
&由于其位置比右眼看到的位置要远,则对于在右眼图像相同的物理位置应该往该位置的前边搜索才可能找到最相近的部分,即要减去d。
同理,对于右视差图则刚好相反,要加d。
实现细节:
1)首先把图像通过intensities转为灰度图像:
2)设定搜索深度d的值和patch的值,然后对图像进行补边界,使得可以从原图像的第一个像素开始进行匹配,我用的补边界的方法和以前做滤波时候原理一样,我都是补周围的值
3)对左图或右图中的每一个像素(i,j)作为patch的中心在另外的左图或右图上来寻找与之最相近的patch部分的搜索深度d,具体为:
&对于模板图像中每个不移动的patch,把该patch里边的每一个像素和另外一张目标图对应得patch(加上搜索深度d的)上的像素点做差的平方和然后再累加起来,每一个d对应一个patch,每一个patch对应一个值(sum),然后把求出在搜索深度d的范围内最小的sum,从而得到该最小的sum的搜索深度d的值,当遇到边界时用判断来处理,具体实现如下:&
如果是求右视差图的话,上边原理以及介绍了,要加上d来进行搜索
左视差图:
实现细节:
图像转为灰度图及边界处理和SSD相同,公式实现:
对左图或右图中的每一个像素(i,j)作为patch的中心,在另外的左图或右图上来寻找与之最相近的patch部分的搜索深度d。
&1)对于模板图像中每个不移动的patch,把该patch里边的每一个像素和另外一张目标图对应的patch(加上搜索深度d的)上的对应像素点分别相乘相加,把模板图中的patch和目标图的patch中的像素值分别平方相加,然后再两个值相乘开方。
2) 每一个d对应一个patch,每一个patch对应一个值(ncctemp),然后把求出在搜索深度d的范围内最大的ncctemp,从而得到该最大的ncctemp的搜索深度d的值,当遇到边界时用判断来处理
NCC与SSD的区别:
NCC抗光照性强,SSD抗光照性弱
如:Add a small constant amount of intensity (e.g. 10) to all right eye images, and re-run the&above two methods. Analyze how the intensity change affects
the results (i.e. the quality)&of the two methods. Explain in which ways that NCC is a better matching cost than SSD.
这里我在view5加了常数10
NCC结果如下:Aloe disp1坏点率为24%
View5强度没有加10是坏点率为:24%
SSD 结果如下:Aloe disp1坏点率为38%
View5强度没有加10是坏点率为:26%
由上边公式可SSD是根据两幅图上patch里两个像素点差值的平方求和来找到最小的值,根据这个最小值我们认为距离为d的patch是匹配的部分,但是在拍照片是,会受到一些因素的影响,比如光照强度等,这样会照成左眼和右眼看到的图像的强度不一样,假如右眼看到的图像强度增加10,这样对于patch里边像素值相减得到的结果就会有很大的变化,从而造成求得的最小值的d也会不一样,因此的图像和右眼图像没有强度变化的结果有很大的不同。
而对于NCC来说,分子上是两个patch里边的像素分别相乘相加,而分母是每个patch里边的像素值平方然后求和在相乘开方,即使右眼的亮度加了,但是分子和分母的值都会同时增大,而且增大的值差不多相同,增大的值相除接近为1,所以得到的结果和右眼强度没有加10的结果基本上一样,没有多大的变化。
所以如果左眼图和右眼图受光照强度干扰比较大的情况下,NCC比SSD好。
nccdispl.m
function [output_img] = nccdispl(leftimg,rightimg)
[nrleft,ncleft,nleft] = size(leftimg);
[nrright,ncright,nright] =size(rightimg);
disparitymap = zeros(nrright,ncright);
if (nleft & 2)
leftimg = rgb2gray(leftimg);
if (nright & 2)
rightimg = rgb2gray(rightimg);
rightimg = rightimg+10;
winsize = 11;
disparitymap = zeros(nrright,ncright);
leftimg = double(leftimg);
rightimg = double(rightimg);
leftimg = supplyborder(leftimg,winsize);
rightimg = supplyborder(rightimg,winsize);
win = (winsize-1)/2;
for i = 1+win:nrright+win
for j = 1+win:ncright+win
min = -9999999;
for k = 0:d
numerator = 0.0;
powerrightwin = 0.0;
powerleftwin = 0.0;
for a=-win:win
for b = -win:win
if j+b-k & 0
numerator = numerator+(leftimg(i+a,j+b)*rightimg(i+a,j+b-k));
powerleftwin = powerleftwin+(leftimg(i+a,j+b)*leftimg(i+a,j+b));
powerrightwin = powerrightwin+(rightimg(i+a,j+b-k)*rightimg(i+a,j+b-k));
ncctemp = numerator/(sqrt(powerrightwin*powerleftwin));
if (min & ncctemp && j+b-k & 0)
disparitymap(i-win,j-win) =
disparitymap = uint8(3*disparitymap);
output_img =
% imshow(disparitymap);
% imwrite(disparitymap,strcat('C:\Users\samsung-\Desktop\output\nccdisp1.png'));
end&/pre&&pre name=&code& class=&plain&&&pre name=&code& class=&plain& style=&font-size:18&&ssddispl.m
&pre name=&code& class=&plain&&function [output_img] = ssddispl(leftimg,rightimg)
[nrleft,ncleft,nleft] = size(leftimg);
[nrright,ncright,nright] =size(rightimg);
if (nleft & 2)
leftimg = rgb2gray(leftimg);
if (nright & 2)
rightimg = rgb2gray(rightimg);
rightimg = rightimg+10;
disparitymap = zeros(nrleft,ncleft);
winsize = 11;
leftimg = double(leftimg);
rightimg = double(rightimg);
leftimg = supplyborder(leftimg,winsize);
rightimg = supplyborder(rightimg,winsize);
win = (winsize-1)/2;
for i = 1+win:nrright+win
for j = 1+win:ncright+win
for k = 0:d
sum = 0.0;
for a=-win:win
for b = -win:win
if j+b-k & 0
temp = leftimg(i+a,j+b)-rightimg(i+a,j+b-k);
temp = temp*
sum = sum+
if (max & sum && j+b-k & 0)
disparitymap(i-win,j-win) =
disparitymap = uint8(3*disparitymap);
output_img =
% imshow(disparitymap);
% imwrite(disparitymap,strcat('C:\Users\samsung-\Desktop\output\ssddisp1.png'));
&pre name=&code& class=&plain&&nccdispr.m
function [output_img] = nccdispr(leftimg,rightimg)
[nrleft,ncleft,nleft] = size(leftimg);
[nrright,ncright,nright] =size(rightimg);
if (nleft & 2)
leftimg = rgb2gray(leftimg);
if (nright & 2)
rightimg = rgb2gray(rightimg);
rightimg = rightimg+10;
winsize = 11;
disparitymap = zeros(nrleft,ncleft);
leftimg = double(leftimg);
rightimg = double(rightimg);
leftimg = supplyborder(leftimg,winsize);
rightimg = supplyborder(rightimg,winsize);
win = (winsize-1)/2;
for i = 1+win:nrleft+win
for j = 1+win:ncleft+win
min = -999999;
for k = 0:d
numerator = 0.0;
powerrightwin = 0.0;
powerleftwin = 0.0;
for a = -win:win
for b = -win:win
if j+b+k &= ncleft+2*win
numerator = numerator+(rightimg(i+a,j+b)*leftimg(i+a,j+b+k));
powerrightwin = powerrightwin+(rightimg(i+a,j+b)*rightimg(i+a,j+b));
powerleftwin = powerleftwin+(leftimg(i+a,j+b+k)*leftimg(i+a,j+b+k));
ncctemp = numerator/(sqrt(powerrightwin*powerleftwin));
if (min & ncctemp && j+b+k &= ncleft+2*win)
disparitymap(i-win,j-win) =
disparitymap = uint8(3*disparitymap);
output_img =
% imshow(disparitymap);
% imwrite(disparitymap,strcat('C:\Users\samsung-\Desktop\output\nccdisp5.png'));
end&/pre&&pre name=&code& class=&plain&&&pre name=&code& class=&plain& style=&font-size:18&&ssddispr.m
&pre name=&code& class=&plain&&function [output_img] = ssddispr(leftimg,rightimg)
[nrleft,ncleft,nleft] = size(leftimg);
[nrright,ncright,nright] =size(rightimg);
if (nleft & 2)
leftimg = rgb2gray(leftimg);
if (nright & 2)
rightimg = rgb2gray(rightimg);
rightimg = rightimg+10;
disparitymap = zeros(nrleft,ncleft);
winsize = 11;
leftimg = double(leftimg);
rightimg = double(rightimg);
leftimg = supplyborder(leftimg,winsize);
rightimg = supplyborder(rightimg,winsize);
win = (winsize-1)/2;
for i = 1+win:nrleft+win
for j = 1+win:ncleft+win
for k = 0:d
sum = 0.0;
for a=-win:win
for b = -win:win
if j+b+k &= ncleft+2*win
temp = rightimg(i+a,j+b)-leftimg(i+a,j+b+k);
temp = temp*
sum = sum+
if (max & sum && j+b+k &= ncleft+win)
disparitymap(i-win,j-win) =
disparitymap = uint8(3*disparitymap);
output_img =
% imshow(disparitymap);
% imwrite(disparitymap,strcat('C:\Users\samsung-\Desktop\output\ssddisp5.png'));
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:19683次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'2872人阅读
stereo(4)
matlab(32)

常用的基于区域的局部匹配准则主要有图像序列中对应像素差的绝对值(SAD, Sum of Absolute Differences),图像序列中对应像素差的平方和(SSD, Sum of Squared Differences),图像的相关性(NCC,
Normalized Cross Correlation)等,另外还有Census变换法,也是一种基于区域的匹配方法。&
(1)SAD 算法:SAD算法是一种最简单的匹配算法,用公式表示为:
SAD(u,v) = Sum{|Left(u,v) - Right(u,v)|}&
选择最小值
此 种方法就是以左目图像的源匹配点为中心,定义一个窗口D,其大小为(2m+1)
(2n+1),统计其窗口的灰度值的和,然后在右目图像中逐步计算其左右窗口的灰度和的差值,最后搜索到的差值最小的区域的中心像素即为匹配点。
基本流程:
1.构造一个小窗口,类似与卷积核。
2.用窗口覆盖左边的图像,选择出窗口覆盖区域内的所有像素点。&
3.同样用窗口覆盖右边的图像并选择出覆盖区域的像素点。
4.左边覆盖区域减去右边覆盖区域,并求出所有像素点差的绝对值的和。
5.移动右边图像的窗口,重复3,4的动作。(这里有个搜索范围,超过这个范围跳出)&
6.找到这个范围内SAD值最小的窗口,即找到了左边图像的最佳匹配的像素块。
匹配算法:SSD算法与SAD算法相似,其公式为:
SSD(u,v) =& Sum{[Left(u,v) - Right(u,v)] * [Left(u,v) - Right(u,v)]}
选择最大值
匹配算法:NCC算法是计算两幅图像匹配区域的互相关性,其计算公式为:
&&&& NCC(u,v) = &[(wl - w)/(|wl - w|)]*[(wr - w)/(|wr - w|)]
选择最大值
NCC is a standard method for matching two windows around a pixel of interest. The nor-malization within the window compensates differences in gain and bias. NCC is statistically the optimal method for compensating Gaussian noise. However,
NCC tends to blur depth discontinuities more than many other matching costs, because outliers lead to high errors within the NCC calculation.
由 以上三种算法可知,SAD算法最简单,因此当模板大小确定后,SAD算法的速度最快。NCC算法与SAD算法相比要复杂得多。
------------------------------------
SAD(Sum of Absolute Difference)=SAE(Sum of Absolute
Error)即绝对误差和
SSD(Sum of Squared Difference)=SSE(Sum of Squared
Error)即差值的平方和
SATD(Sum of Absolute Transformed Difference)即hadamard变换后再绝对值求和
MAD(Mean Absolute Difference)=MAE(Mean Absolute Error)即平均绝对差值
MSD(Mean Squared Difference)=MSE(Mean Squared Error)即平均平方误差
matlab code:/downloads195/sourcecode/others/detail918036.html
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:427564次
积分:5249
积分:5249
排名:第5397名
原创:79篇
转载:196篇
评论:35条
(9)(4)(1)(1)(1)(4)(6)(1)(1)(3)(2)(1)(2)(4)(2)(2)(1)(1)(1)(4)(9)(2)(3)(1)(3)(4)(10)(2)(2)(3)(2)(4)(7)(23)(11)(7)(3)(8)(6)(6)(9)(8)(5)(7)(35)(11)(1)(3)(5)(20)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'君,已阅读到文档的结尾了呢~~
一种图像匹配中SSD和NCC算法的改进,图像匹配算法,matlab图像匹配算法,opencv 图像匹配算法,android 图像匹配算法,图像匹配搜索算法,图像匹配算法研究,图像匹配算法 java,图像匹配算法代码,图像匹配算法有哪些
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
一种图像匹配中SSD和NCC算法的改进
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口基于SSDA的新型地板尺寸测量方法*_地板_中国百科网
基于SSDA的新型地板尺寸测量方法*
     1 引言近年来,实木板材生产中关于木材品质的无损检测,如板材尺寸检测、板材表面粗糙度检测,木材材质微观构造分析、板材表面缺陷分析、板材表面缺陷检测、树种识别和苗木参数测量等方面得到深入研究。因而,本文以木质地板在线分选技术为应用背景,提出了对生产流水线上地板尺寸进行在线测量的方法。测量过程中两幅相关图像的配准是关键部分,而且需要具有良好的准确度和执行速度,才能为后续的处理打下基础。目前图像匹配方法主要有:基于灰度相关的匹配、基于特征的匹配等。基于灰度相关的匹配优点是方法简单、抗干扰性能好、易于硬件实现,但是计算量大,并不适用与在线测量。基于特征的匹配模式计算速度提高了,但是算法比较复杂,不易于硬件实现。另外,其匹配性能在很大程度上取决于特征提取的质量匹配精度不高[1,2]。由Barnea提出的一种快速的块匹配算法:序列相似性检测算法(SSDA)能很快丢弃不匹配的点,减少花在不匹配点上的计算量,从而提高匹配速度,并且算法比较简单,易于实现[3]。本文采用SSDA进行图像配准,并且考虑地板运动情况限定了搜索范围,进一步加快了运行速度。仿真实验证明,本文方法能准确的得到地板轮廓,进而测得地板尺寸。2 SSDA简介序贯相似性检验算法(Sequential Similarity Detection Algorithms,SSDA)是一种比传统的交叉相关更容易实现的算法,他最主要的优点是处理速度快。一方面,提出了一个计算更为简单的相似性度量准则,这一准则即使在非归一化情况下仍可在匹配处获得极小值,并且没有乘法运算。另一方面,这种方法采用了序贯搜索策略。该准则实际上是一个误差绝对值的累加和,在图像不匹配的位置,累加时误差增长的很快,而在图像匹配位置上的误差随着累加次数增长缓慢。如果选择一个简单的固定门限,并规定累加误差一旦超过该门限就停止运算,则在各个不匹配位置上累加运算将提前停止,从而大大节省了运算量。而在匹配位置上,需经过很多点的累加后才能达到固定门限的目的。因而可把累加次数作为匹配的判据,累加次数最大的位置就是匹配位置[4]。这种方法称为固定门限的SSDA方法。本文亦是采用在固定门限法的基础上稍做改进。3 基于SSDA的长度测量本文的测量装置系集成于木质地板分选系统之中,并且所实现的在线测量单块地板尺寸亦为分选系统中的一个功能模块。简要构成如图1所示。在此分选系统中,各个待分选加工的地板长度不一,并且使用工业相机在线拍摄时,需要把把拍摄视野和镜头焦距恒定才有实际测量意义。因此,需要把工业相机的视野集中到地板的局部的位置,而后通过后期的处理得到地板的全局图像信息。综上,系统的测量模块执行过程如下:(1) 待加工地板由传送带运送至工业相机视野范围之内,工业相机启动电子快门,进行高速连拍,捕捉到该地板多幅各个局部的图像序列,并且在相邻的图像间存在一定的重合部分。(2) 由上一过程得到的图片序列传送至中央处理机进行图像处理,通过所执行的算法得出该地板的并输出显示,同时,为后续的系统分选策略提供动作依据。其中,需要考虑在图片序列经过图像处理后,得到的测量结果,需要通过摄像机标定后的换算为最终的地板尺寸测量值。基于上述测量系统的硬件构成,对于木质地板尺寸测量的算法可主要分成几个部分,分别是边缘提取,图像配准,边缘图像融合,计算地板长度。3.1 单幅地板图像的边缘提取图像边缘的提取是对地板图像长度测量的前提,也是图像分割的一个步骤。在单色图像的分割算法中,常常基于图像亮度值的不连续性和相似性这两个基本特征。在图像不连续性上,认为亮度的突变就很容易成为图像的边缘。所以,把得到的待提取图像进行先进行滤波器滤波,通过寻找零交叉来确定图像边缘。如图2所示,木质地板本身的材质决定,在其表面上会有一些天然的纹理,而这些纹理难免会对图像处理边缘提取算法的执行造成干扰(如图2-b)。所以在进行边缘提取之前,应主要针对感兴趣的边缘进行计算提取。本文通过把原始图片二值化后,进行边缘提取,已得到比较纯粹的地板边缘轮廓(如图2-c,2-d)。3.2 相邻图像的配准对于地板长度测量算法的核心在于解决由单方向位移引起的关联图像配准问题。本文中,相邻的两幅相关联的图像,定义其中时间序列较早的一幅为基准图,另一幅平移或变化的图像为待配准图像。两幅图像具有相同的点阵和相似的灰度范围,从实时图选定三个窗口与基准图上的搜索区域的各个可能子图相匹配,子图由左上角坐标参考点唯一确定。因此,配准问题就是寻找匹配点使窗口与该点标识的子图最相似。配准方法的实现包括两个方面:相似性度量和搜索策略[5]。SSDA算法的步骤如下[6]:(1) 定义绝对误差值为:在式(1)中,为模板覆盖下的搜索子图的像素点上的亮度值,为模板位图像素的亮度值,为搜索子图坐上顶点的坐标值。(2) 取一个不变的阈值 (3) 在子图中随机选取像素点,计算它同中对应点的误差值然后把这点的差值同其他点对的差值累加起来,当累加次误差超过阈值时,则停止累加,并记下累加次数定义 SSDA的检测曲面为:(4) 把值最大的点定为匹配点,因为在这一点上需要很多次累加才能使总误差超过阈值考虑到拍摄过程中地板移动造成的图像平移在350个像素以内,因此限定模板图像的搜索范围,使配准速度进一步提高。另一方面,图像运动为单项运动,所以得到的检测曲面实际为一维的曲线,可以很快提高检测速度。3.3 边缘图像融合与长度计算由于边缘提取后的图像已经舍掉了细节,所以此阶段的图像融合为决策级的图像融合。在相邻的图像进行位置匹配后,可直接把细节图像对应边缘图像对应累加,即可得到木质地板全局边缘图像,如图4.e所示。图像匹配后进行轮廓融合后,通过搜索最大最小横纵坐标,即可找到矩形边缘的四个角点,由公式(3)得到木质地板的长度的像素值。4 实验结果分析本文对上述算法进行了仿真,选择四幅时序图片作为处理对象,应用MATLAB 2010b平台实现了上述算法。(1) 图像匹配结果如图3所示,每幅图片的白色窗口均与其后相邻图片的黑色窗口相匹配。容易看出,匹配的准确率达到精度要求。(2) 图像融合结果如图4所示,所得的地板边缘图像序列进行叠加融合,得到单块地板全局轮廓线。首先,定性的分析此图像融合方法把各部分子图合并后的得到的地板轮廓是否满意。由于在把地板推到传送带时有一定的任意性,因而会使地板的长边与传送带运动方向不完全平行,经常出现一个小的角度(参见图4e),正是利用这一点,可以定性判断图像融合的效果。如果把融合的效果不佳,则图像边缘势必出现错位和不连贯现象;反之,整幅图像看起来会很连贯。在本文的仿真实验中,如图4f所示,二值图像中三条直线处,即为各个地板边缘子图的接缝处。可以看出,在每个接缝的位置,并没有出现错位或者图片不连贯的现象。这表明应用此图像融合的方法,可以精确并快速的得到地板轮廓图。而后,对地板长度进行定量的测算并对测量值与真实值进行对比。针对图片中地板长度的测量,不妨通过计算地板长边白色像素点的值来得到。同时,摄像机的视场固定并且地板的厚度基本一致,可知由摄像机所拍摄图片中地板的尺寸与实际地板尺寸成正比。再考虑如何衡量地板测量值与真实值相仿程度。因为在进行图像融合时,仅会在地板的长度方向存在误差,宽度方向并无影响,所以可以利用长宽比来表示测量值的准确性。在本次仿真中,仅仅给出此方法测量的误差计算,用以证明方法的精确度。通过读取图片像素点位置,得到地板矩形轮廓线的四个顶点坐标(由左上顶点起逆时针顺序)依次是(39,207)、()、()、(38,396)。故求得矩形边长为其长宽比5.88()与地板实际尺寸长宽比5.78(31.2cm : 5.4cm )基本一致,达到精度要求。5 结束语本文提出了一种基于SSDA的地板尺寸测量方法。该方法在程序编写时仅使用到加法,更加适应在运动过程中测量目标的实时性要求,结合边缘特征得到融合后的地板轮廓。在测量过程中,限定了搜索范围,提高了运行效率。实验结果表明,本文方法能实现测量目标,并具有很好的精度。由于本文方法使用了多幅图片序列进行配准融合,当目局部配准误差过大,累加后的总误差会随着图片的增加变化更大,会影响到最后的测量结果甚至超过要求的测量精度。此外,如果机器震动较大,引起的地板和皮带产生相对运动的情况下,将难以获得准确的配准搜索范围,可能导致匹配错误,最终影响测量结果。这些问题将是本文进一步的研究方向。参考文献:[1] 王红梅,张科,李言俊等.图像匹配研究进展[J].计算机工程与应用,):42-44,47.[2] 吴培景,陈光梦.一种改进的SSDA图像匹配算法[J].计算机工程与应用,):76-78.[3] Barnea D I.A Class of Algorithm for Fast Digital Image Registration[J].IEEE Trans.on Computes,):179-186.[4] 敬忠良,肖钢[J].图像融合――理论与应用[M].北京:高等教育出版社,.[5] 钟春香,梁志辉.一种用于图象配准的或图最佳搜索算法 [J].华中理工大学学报,):37-41.[6] 谢大刚,林喜荣,丁天怀等.基于VFW的滚动按捺指纹拼接系统的设计[J].计算机工程与应用,):206-208.作者简介:李想(1987-),女,硕士研究生,研究方向:智能检测与控制。
收录时间:日 08:49:48 来源:中国自动化网 作者:匿名
上一篇: &(&&)
创建分享人
喜欢此文章的还喜欢
Copyright by ;All rights reserved. 联系:QQ:数字图像处理(2)
SSDA序贯相似性检测算法
&SSDA是一种基于模板匹配的图形匹配算法,目前的匹配方法主要有,基于灰度相关的匹配,基于特征的匹配灯。
优点:方法简单,抗干扰性能好,易于硬件实现。
缺点:计算量大。
所以该文章通过一系列方法来改进算法。
基本的SSDA算法
目标图像记为S,大小为K*L,待搜索图像记为W,大小为M*N。匹配时选择目标图像的左上角为参考点,当前待匹配点位于W上的(u,v)处时,在W中所选取的待匹配区域是以点(u,v),(u,v+L-1),(u+K-1,v),(u+K-1,v+L-1)组成的区域。相当于参考点位置(i,j)的点的匹配误差定义为:
& 在目标图像和带匹配区域中随机抽取n个点,计算这些点引起的误差和序列,记为:
当 与预先设定好的一个阈值进行比较,如果大于这个阈值的话,结束这个待匹配点的匹配过程,记下当前的k值。
如果小于这个阈值的话,则抽取下一个点做计算。直到大于这个阈值,或者k=n,记下k值。
阈值的设定,最大匹配点数n=150.
对不同的待匹配点进行上述匹配计算,最后取最大k值对应的待匹配点位置,认为这就是需要找的匹配点。
改进的SSDA算法
减少噪声的影响
在每个带匹配区域中,计算第k点的误差时,首先将计算结果与预定义的噪声阈值T2比较,如果大于该阈值,则认为词典产生的误差是由于噪声引起的,将该点结果丢弃,不加入误差和中,但要对此噪声点计数。如果在一个待匹配区域内噪声计数值超过预定义的噪声计数阈值T3,则停止本次计算,记录下本次的k值。
如果第k点的误差小于T2时,则认为此时的误差不是由于噪声而引起的,沿用原来的基本的SSDA算法。
进行梯度处理
由于在一些非匹配点中,但图像中相似部分比较多的时候,一些点之间的误差可能会相当小,在该点处停止计算的时间将往后退,道济计算量大规模的增大。
所以采用梯度处理的方法,首先分别计算目标图像和待搜索图像的灰度梯度,并以阈值T1对他们进行量化处理,大于阈值的为1,小于阈值的为0.其中点1的为图像的特征点,然后随机抽取部分特征点对图像进行匹配。
算法基本流程
计算目标图像与待搜索图像各自某个方向的图像梯度。
选取用于计算误差的点:将梯度图像中梯度大于阈值T1的点作为计算匹配误差的特征点,在其中随机抽取n点,为了保证匹配算法的准确性,所取得的数目占模板内总点数的比例不能太小。
设置待匹配点(u,v)=(0,0)
初始化设置:k=1,e(u,v,0)=0
计算,如果小于噪声阈值
&,进行下一步
结合金字塔法
把模板图像和目标图像进行等比例降采样,一般根据图像具体分辨率定。最多8倍降采样,2倍为一个单位。
从最小分辨率开始进行SSDA算法。
但因为分辨率较低可能只能得出几个粗匹配位置,所以在上一层分辨率上对应的一个或多个粗匹配位置附近进行,获得概率更大的几个采样点。
依次类推下,直到最大分辨率 S0,即整个匹配过程结束。
比较各个k,支出最大k值对应的位置(u,v),这就是要找到的匹配点。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1286次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 opencv 图像匹配算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信