自适应阈值化的函数
- 格式:doc
- 大小:33.50 KB
- 文档页数:4
halcon 选择阈值区域内最大圆Halcon 是一款功能强大的机器视觉软件,广泛应用于工业自动化领域。
其中一个常见的应用场景就是在图像中选择阈值区域内的最大圆。
本文将一步一步介绍如何使用Halcon软件实现该功能。
第一步:导入图像在Halcon软件中,首先需要导入要处理的图像。
可以通过在程序中指定图像路径,或者直接通过拖拽和放置图像文件到软件界面来导入图像。
第二步:预处理图像在选择阈值区域内的最大圆之前,通常需要对图像进行一些预处理操作,以提高后续处理的准确性。
常见的预处理操作包括图像平滑、增强和滤波等。
这些操作可以通过Halcon软件提供的各种图像处理函数来实现。
第三步:选择阈值区域要选择阈值区域内的最大圆,首先需要确定阈值区域。
可以通过手动设定阈值,或者使用自适应阈值化算法来确定阈值区域。
Halcon软件提供了多种阈值化函数,可以根据实际需求选择合适的函数进行阈值化操作。
第四步:查找圆一旦确定了阈值区域,接下来就需要在该区域内查找圆形目标。
Halcon 软件提供了多种圆形目标查找函数,例如find_circle函数。
使用该函数可以在指定图像区域内查找圆形目标,并返回圆心坐标和半径等相关信息。
第五步:筛选最大圆在找到圆形目标之后,还需要对找到的圆进行筛选,以获得阈值区域内的最大圆。
这可以通过比较圆的半径大小来实现。
Halcon软件提供了一个函数tuple_max,可以用于比较不同圆的半径大小,并返回半径最大的圆的相关信息。
第六步:可视化结果最后一步是将结果可视化,以便于直观地观察选择到的阈值区域内的最大圆。
Halcon软件提供了各种图像显示函数,可以将结果图像显示在界面中,或者保存为图片文件。
以上就是使用Halcon软件选择阈值区域内最大圆的一般步骤。
当然,具体的实现方法可以根据实际需求进行调整和优化。
希望本文对你理解如何使用Halcon软件实现选择阈值区域内最大圆有所帮助。
如果想要深入了解Halcon软件的更多功能和应用场景,可以继续学习相关资料和实践。
图像二值化----otsu(最大类间方差法、大津算法)
最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU。
它是按图像的灰度特性,将图像分成背景和目标两部分。
背景和目标之间的类间方差越大,说明构成图像的两部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小。
因此,类间方差最大的分割意味着错分概率最小。
OTSU被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。
Otsu算法步骤如下:
设图象包含L个灰度级(0,1…,L-1),灰度值为i的的象素点数为Ni ,图象总的象素点数为N=N0+N1+...+N(L-1)。
灰度值为i的点的概为:
P(i) = N(i)/N.
门限t将整幅图象分为暗区c1和亮区c2两类,则类间方差σ是t的函数:
σ=a1*a2(u1-u2)^2 (2)
式中,aj 为类cj的面积与图象总面积之比,a1 = sum(P(i)) i->t, a2 = 1-a1; uj 为类cj的均值,u1 = sum(i*P(i))/a1 0->t,
u2 = sum(i*P(i))/a2, t+1->L-1
该法选择最佳门限t^ 使类间方差最大,即:令Δu=u1-u2,σb = max{a1(t)*a2(t)Δu^2}。
opencv 动态阈值算法OpenCV(Open Source Computer Vision)是一个开放源代码的计算机视觉库,包含了超过2500个优化的算法和超过500个示例。
OpenCV提供了动态阈值算法来处理图像。
动态阈值算法是一种自适应的方法,根据图像的局部特征来确定每个像素点的阈值。
这种方法可以有效地处理光照不均匀或者背景杂乱的图像。
OpenCV提供了几种常用的动态阈值算法,包括:1. 自适应高斯阈值法(cv2.ADAPTIVE_THRESH_GAUSSIAN_C):根据感兴趣区域周围的像素点确定阈值,使用高斯加权平均来获取感兴趣区域的阈值。
2. 自适应均值阈值法(cv2.ADAPTIVE_THRESH_MEAN_C):与高斯阈值法类似,但是使用的是平均值来获取感兴趣区域的阈值。
这些算法都可以通过cv2.adaptiveThreshold()函数来实现。
函数的参数包括输入图像、输出图像、阈值类型、块的大小(用于指定感兴趣区域的大小)、常数C(用于调整阈值)等。
以下是一个示例代码:```import cv2img = cv2.imread('input.jpg', 0)# 自适应高斯阈值处理th1 = cv2.adaptiveThreshold(img, 255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, \cv2.THRESH_BINARY, 11, 2)# 自适应均值阈值处理th2 = cv2.adaptiveThreshold(img, 255,cv2.ADAPTIVE_THRESH_MEAN_C, \cv2.THRESH_BINARY, 11, 2)cv2.imshow('Original Image', img)cv2.imshow('Adaptive Gaussian Thresholding', th1)cv2.imshow('Adaptive Mean Thresholding', th2)cv2.waitKey(0)cv2.destroyAllWindows()```在上面的示例中,我们首先通过cv2.imread()函数读取输入图像,然后分别使用自适应高斯阈值法和自适应均值阈值法进行处理,最后使用cv2.imshow()函数显示原始图像和处理后的图像。
MATLAB神经网络工具箱函数说明:本文档中所列出的函数适用于MATLAB5.3以上版本,为了简明起见,只列出了函数名,若需要进一步的说明,请参阅MATLAB的帮助文档。
1. 网络创建函数newp 创建感知器网络newlind 设计一线性层newlin 创建一线性层newff 创建一前馈BP网络newcf 创建一多层前馈BP网络newfftd 创建一前馈输入延迟BP网络newrb 设计一径向基网络newrbe 设计一严格的径向基网络newgrnn 设计一广义回归神经网络newpnn 设计一概率神经网络newc 创建一竞争层newsom 创建一自组织特征映射newhop 创建一Hopfield递归网络newelm 创建一Elman递归网络2. 网络应用函数sim 仿真一个神经网络init 初始化一个神经网络adapt 神经网络的自适应化train 训练一个神经网络3. 权函数dotprod 权函数的点积ddotprod 权函数点积的导数dist Euclidean距离权函数normprod 规范点积权函数negdist Negative距离权函数mandist Manhattan距离权函数linkdist Link距离权函数4. 网络输入函数netsum 网络输入函数的求和dnetsum 网络输入函数求和的导数5. 传递函数hardlim 硬限幅传递函数hardlims 对称硬限幅传递函数purelin 线性传递函数tansig 正切S型传递函数logsig 对数S型传递函数dpurelin 线性传递函数的导数dtansig 正切S型传递函数的导数dlogsig 对数S型传递函数的导数compet 竞争传递函数radbas 径向基传递函数satlins 对称饱和线性传递函数6. 初始化函数initlay 层与层之间的网络初始化函数initwb 阈值与权值的初始化函数initzero 零权/阈值的初始化函数initnw Nguyen_Widrow层的初始化函数initcon Conscience阈值的初始化函数midpoint 中点权值初始化函数7. 性能分析函数mae 均值绝对误差性能分析函数mse 均方差性能分析函数msereg 均方差w/reg性能分析函数dmse 均方差性能分析函数的导数dmsereg 均方差w/reg性能分析函数的导数8. 学习函数learnp 感知器学习函数learnpn 标准感知器学习函数learnwh Widrow_Hoff学习规则learngd BP学习规则learngdm 带动量项的BP学习规则learnk Kohonen权学习函数learncon Conscience阈值学习函数learnsom 自组织映射权学习函数9. 自适应函数adaptwb 网络权与阈值的自适应函数10. 训练函数trainwb 网络权与阈值的训练函数traingd 梯度下降的BP算法训练函数traingdm 梯度下降w/动量的BP算法训练函数traingda 梯度下降w/自适应lr的BP算法训练函数traingdx 梯度下降w/动量和自适应lr的BP算法训练函数trainlm Levenberg_Marquardt的BP算法训练函数trainwbl 每个训练周期用一个权值矢量或偏差矢量的训练函数 11. 分析函数maxlinlr 线性学习层的最大学习率errsurf 误差曲面12. 绘图函数plotes 绘制误差曲面plotep 绘制权和阈值在误差曲面上的位置plotsom 绘制自组织映射图13. 符号变换函数ind2vec 转换下标成为矢量vec2ind 转换矢量成为下标矢量 14. 拓扑函数gridtop 网络层拓扑函数hextop 六角层拓扑函数randtop 随机层拓扑函数。
基本阈值技术的原理和分类一、引言在图像处理和计算机视觉领域中,基本阈值技术被广泛应用于图像分割、边缘检测、目标识别等诸多任务中。
本文将介绍基本阈值技术的原理和分类,以帮助读者更好地理解和应用该技术。
二、基本阈值技术的原理基本阈值技术是一种简单而有效的图像分割方法,其基本原理是将图像中的像素值与预设的阈值进行比较,并根据比较结果将像素分为两个类别,如前景和背景。
这种方法的基本思想是利用像素值的强度差异来实现目标的分割。
基本阈值技术的步骤如下:1. 选择合适的阈值。
阈值可以根据图像的特点和应用需求进行选择,常见的选择方法包括手动选择和自动选择两种方式。
2. 将图像中的像素值与阈值进行比较。
对于灰度图像,通常将像素值与阈值进行比较,大于阈值的像素被认为是前景,小于阈值的像素被认为是背景。
3. 根据比较结果进行像素分类。
根据比较结果,将像素分为前景和背景两个类别,并进行标记或颜色编码。
4. 可选的后处理。
在像素分类后,可以进行一些后处理操作,如去除噪声、填补空洞等,以进一步优化分割结果。
三、基本阈值技术的分类基本阈值技术根据阈值的确定方式和应用领域的不同,可以分为以下几类:1. 全局阈值技术全局阈值技术是最常见和最简单的阈值分割方法,其特点是将整个图像的像素值与一个全局阈值进行比较。
全局阈值通常通过试错法确定,即通过不断调整阈值来使目标与背景尽可能分开,直到达到最佳分割效果为止。
2. 自适应阈值技术自适应阈值技术是一种根据图像局部特征自动调整阈值的方法。
该方法通过对图像进行分块处理,对每个块内的像素值计算局部阈值,并将其应用于该块中的所有像素。
自适应阈值技术适用于图像中存在光照不均匀或存在局部纹理差异的情况。
3. 多阈值技术多阈值技术是一种将图像分割为多个区域的方法,每个区域根据其特定的阈值进行分割。
多阈值技术适用于图像中存在多个目标或目标具有不同的特征的情况。
常见的多阈值分割方法包括基于直方图的方法、基于聚类的方法等。
halcon阈值Halcon是一种高级的计算机视觉软件,常常用于图像处理和机器视觉领域中。
Halcon阈值也称为二值化,是对图像进行处理的一种方法。
在计算机视觉中,阈值是一种重要的方法,它用于将灰度图像转换为二值图像或分割图像。
在本文中,我们将介绍Halcon阈值的用途和如何使用它进行图像处理。
Halcon阈值的定义Halcon阈值是指将一种灰度图像转换为二值图像的操作。
在进行二值图像处理时,我们可以使用一些阈值来划分图像中的不同区域。
具体来说,我们将灰度图像像素值确定为阈值以上还是阈值以下。
阈值可以是任何值,但是通常使用用户可以指定的固定值。
步骤一:图像加载在进行Halcon阈值处理之前,我们需要先加载要处理的图像。
在Halcon软件中,使用read_image函数可以加载图像。
例如:read_image(Image, 'input_image.tif')步骤二:阈值处理Halcon提供了多种阈值处理方法,包括全局阈值和局部阈值。
全局阈值使用一个固定值来划分图像中的像素为黑色或白色。
局部阈值根据图像中不同区域的像素值进行阈值分割。
以下是一些常见的阈值处理方法:1. 二值化处理:最简单的方法是使用threshold函数,将灰度图像转换为二值图像。
threshold(Image, BinaryImage, 128, 255)其中,第一个参数是输入灰度图像,第二个参数是输出的二值图像,第三个参数是阈值下限,第四个参数是阈值上限。
该函数将大于或等于阈值的像素设置为白色(255),小于阈值的像素设置为黑色(0)。
2. 局部阈值处理:Halcon也提供了基于局部像素值的阈值处理方法,例如adaptive_threshold和select_threshold函数。
这些方法在灰度图像的不同区域使用不同的阈值。
3. 自适应阈值。
Halcon阈值还可以使用自适应阈值处理来改善处理效果,方法是计算每个像素的邻域平均值,并使用该值作为该像素的阈值。
二值化处理函数二值化处理函数是数字图像处理中常用的一种图像处理方法,它能够将图像转化为只包含两种颜色的二值图像。
在二值图像中,像素点只有两种取值,分别为0和255(或1和255),代表黑色和白色。
二值化处理函数的应用非常广泛,可以用于目标检测、图像分割、文字识别等领域。
二值化处理函数的核心思想是将图像中的像素点根据其灰度值进行分类,将灰度值高于某个阈值的像素点设置为白色,灰度值低于等于阈值的像素点设置为黑色。
通过调整阈值的值,可以控制图像的二值化效果,使得所得到的二值图像更加符合需求。
在实际应用中,二值化处理函数通常有多种实现方式。
最简单的方式是全局阈值法,即将图像中所有像素点的灰度值与一个固定的阈值进行比较。
大于阈值的像素点设置为白色,小于等于阈值的像素点设置为黑色。
这种方法简单直观,但对于光照不均匀或者目标物体与背景颜色相似的图像处理效果不佳。
为了解决上述问题,还有一种常用的自适应阈值法。
自适应阈值法将图像分成多个小区域,每个区域都有一个相应的局部阈值。
根据每个像素点所在的区域来确定其对应的阈值。
这种方法能够有效地解决光照不均匀的问题,提高了二值化处理函数的准确性。
除了全局阈值法和自适应阈值法,还有一些其他的二值化处理函数。
例如,大津法(Otsu's method)是一种根据类间方差最大化来确定阈值的方法。
大津法能够自动找到最佳阈值,使得图像的前景和背景之间的差异最大化。
这种方法在图像质量较好、目标物体与背景之间差异较大的情况下效果较好。
在实际应用中,二值化处理函数不仅可以将图像转化为二值图像,还可以提取图像中的目标物体。
通过将图像进行二值化处理,再进行形态学操作(如腐蚀、膨胀、开运算、闭运算等),可以消除图像中的噪声、连接相邻的目标物体、填充目标物体的空洞等。
这样,就能够得到更加清晰、准确的目标物体图像。
二值化处理函数是数字图像处理中常用的一种图像处理方法。
它能够将图像转化为只包含两种颜色的二值图像,广泛应用于目标检测、图像分割、文字识别等领域。
自适应确定dbscan算法参数的算法研究
DBSCAN算法是一种无监督聚类算法,在聚类过程中需要给定两个参数:邻域半径(ε,eps)和最小邻域点数(MinPts)。
这两个参数直接影响聚类结果的质量,但是很难确定合适的参数值。
自适应确定DBSCAN算法参数的算法是一种动态确定DBSCAN算法参数的方法,主要分为以下步骤:
1. 初始化ε和MinPts的值,并给定一个误差阈值Eps和一个最小累计次数K。
这里,ε和MinPts的取值可以根据经验或领域知识进行初始化。
2. 对数据进行DBSCAN聚类,并得到当前的聚类结果。
3. 统计聚类结果中的噪声点个数Noi和聚类个数Ncl,计算数据点的平均在最近K个点内的密度Den,并计算当前ε的平均密度
Denε。
4. 根据Den和Denε,将ε和MinPts的取值作为决策变量进行优化,最小化F函数:
F(ε,MinPts) = |Den - Denε| + |Ncl - K|
对于F函数的最小化,可以采用遗传算法、模拟退火等优化算法进行求解。
5. 判断优化结果的稳定性,如果优化结果与上一次迭代相差小于Eps并且优化次数达到最小累计次数K,则停止算法,输出最终的ε和MinPts值。
否则,将当前优化结果作为新的初始值,继续进行下一轮迭代。
通过自适应确定DBSCAN算法参数的算法,可以动态地确定合适的邻域半径和最小邻域点数,使得得到的聚类结果更加合理和准确。
opencv棋盘格角点检测原理总结图1 :原始图片第一步,局部平均自适应阈值化方法对亮度不均匀情况适应性强,因此用该方法对图像二值化,均衡化后得到了理想的门限,效果如图2所示。
第二步,图像膨胀分离各个黑块四边形的衔接,由于膨胀的是白色像素点,因此能够缩小黑块四边形,断掉衔接,效果如图3所示。
第三步,检测四边形,计算每个轮廓的凸包,多边形检测,以及判断是否只有四个顶点,若是则为四边形,再用长宽比、周长和面积等约束去除一些干扰四边形,效果如图4所示。
第四步,将每个四边形作为一个单元,它分别有邻近的四边形,无邻近四边形的为干扰四边形,两个邻近四边形为边界处四边形,四个邻近四边形为内部四边形。
每个四边形的序号可按邻近关系排序,然后按对角两个四边形相对的两个点,取其连线的中间点作为角点,效果如图5 所示。
整个棋盘定位过程是一个循环过程,先对读入的棋盘图像直方图均衡化,接着自适应(取决于flag参数)二值化,再对二值化后的图像膨胀。
为了定位的鲁棒性,自适应二值化和膨胀所采用核的大小不能是唯一的,故不断的循环用不同的参数用对棋盘图像处理,膨胀所采用核的大小逐渐变大。
在每次的循环过程都需要,经过以下步骤。
1、在二值化后图像外围画一白色的矩形框(方便轮廓提取),然后进行轮廓提取cvFindContours。
经过膨胀后的二值图像,每个黑色的方格已经被分开,轮廓提取后可以得到每个方格的轮廓,当然还有很多干扰轮廓。
对轮廓进行多边形拟合cvApproxPoly,排除不是矩形的轮廓,利用矩形的其他性质,再排除一些干扰轮廓。
这些工作主要由icvGenerateQuads函数完成。
2、寻找每个方格的相邻方格,并记相邻方格的个数,连同相邻方格的信息存在相应CvCBQuad结构体中。
二值图像在膨胀后原本相邻的方格,分开了,原来相连部分有一个公共点,现在分开变成了两个点。
找到相邻的方格之后,计算出原来的公共点,用公共点替代膨胀后分开的点。
自适应阈值原理自适应阈值原理是一种在计算机视觉领域中常用的图像分割算法。
该算法基于图像的局部特征和全局统计信息,通过自动调整阈值的方式,从而实现对图像的自适应分割。
在传统的图像分割算法中,通常需要提前确定一个全局阈值来将图像分为目标和背景。
然而,由于图像中目标和背景的亮度和对比度存在较大的差异,全局阈值往往无法适应不同区域的特征差异,从而导致分割结果不准确。
自适应阈值原理的核心思想是将图像分割的阈值根据局部特征进行自动调整。
具体而言,算法将图像分割为多个局部块,并计算每个块的局部阈值。
这些局部阈值是根据块内像素的亮度和对比度统计得到的。
然后,通过对每个像素与其所在块的局部阈值进行比较,确定该像素属于目标还是背景。
自适应阈值原理的优点在于能够适应不同区域的亮度和对比度差异,从而提高图像分割的准确性。
而传统的全局阈值算法在处理具有复杂背景和光照变化的图像时,往往无法取得良好的效果。
然而,自适应阈值原理也存在一些问题。
首先,对于块的选择和大小,需要进行合理的确定。
如果块的大小太小,可能会导致分割结果过于精细;如果块的大小太大,可能会导致分割结果模糊。
其次,自适应阈值原理依赖于图像的局部特征和全局统计信息,对于复杂的图像场景,可能需要进一步的处理和优化。
为了克服自适应阈值原理的局限性,研究人员提出了许多改进算法。
例如,基于区域生长的分割算法能够根据像素的相似性将图像分割为不同区域;基于边缘检测的分割算法能够通过检测图像的边缘来实现分割。
这些算法在一定程度上提高了图像分割的准确性和鲁棒性。
自适应阈值原理是一种常用的图像分割算法,能够根据图像的局部特征和全局统计信息自动调整阈值,从而实现对图像的自适应分割。
它的优点在于能够适应不同区域的亮度和对比度差异,提高分割的准确性。
然而,该原理也存在一些问题,需要进一步的改进和优化。
随着计算机视觉技术的不断发展,相信将有更多高效准确的图像分割算法被提出和应用。
自适应二值化
1 自适应二值化简介
自适应二值化是图像处理技术的一种,又叫迭代阈值技术,也就
是根据不同的环境可以自己动态调整阈值值大小。
它的本质是一种迭
代的过程,根据每一个点把图像分成灰度比较大的和灰度比较小的,
从而形成是与否的阈值判决,再根据统计规律,从新调整阈值值,改
变两个区域比例,一直迭代,最终形成二值化后的图片。
2 自适应二值化的优势
自适应二值化和其他固定阈值二值化技术相比具有以下优势:
(1)在图像的不同灰度下,对比时间发生变化,具有自适应性,
特别是在灰度变化较大的地方,有效地应对。
(2)只要图像内容不动,只要在光线,亮度、对比度未发生变化,那么阈值值也将不变,所以它更加稳定,在图像处理自动化中非常有用。
(3)使软件具有可拓展的性。
例如阈值选取的拓展可以根据图像
处理的要求决定,所以需要更加精确的情况下,我们可以根据需要进
行拓展。
3 自适应二值化的应用
自适应二值化在实际工作中的应用有很多,例如芯片故障检测,
机器人定位,图像复原等都可以采用这项技术。
此外,自适应二值化算法可以用于对文本信息进行清洗,并保留主要字段,例如在文件或者影像中保留重要的文字以及表格信息,在支付也可以将已填写的重要信息放大显示,提高操作的精确度。
4 总结
自适应二值化技术是图像处理技术中的一种,它可以自动根据不同场景动态调整阈值,使二值化处理更加精确,并且能够根据不同任务进行拓展,这一技术作用用途十分广泛,在工业级图像处理中非常重要,未来可以运用在更多的场景中。
自适应阈值化的函数为:
AdaptiveThreshold
自适应阈值方法
void cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,
int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,
int threshold_type=CV_THRESH_BINARY,
int block_size=3, double param1=5 );
src
输入图像.
dst
输出图像.
max_value
使用CV_THRESH_BINARY 和CV_THRESH_BINARY_INV 的最大值.
adaptive_method
自适应阈值算法使用:CV_ADAPTIVE_THRESH_MEAN_C 或
CV_ADAPTIVE_THRESH_GAUSSIAN_C (见讨论).
threshold_type
取阈值类型:必须是下者之一
▪CV_THRESH_BINARY,
▪CV_THRESH_BINARY_INV
block_size
用来计算阈值的象素邻域大小: 3, 5, 7, ...
param1
与方法有关的参数。
对方法CV_ADAPTIVE_THRESH_MEAN_C 和
CV_ADAPTIVE_THRESH_GAUSSIAN_C,它是一个从均值或加权均值提取的常数(见讨论), 尽管它可以是负数。
函数cvAdaptiveThreshold 将灰度图像变换到二值图像,采用下面公式:
threshold_type=CV_THRESH_BINARY:
dst(x,y) = max_value, if src(x,y)>T(x,y)
0, otherwise
threshold_type=CV_THRESH_BINARY_INV:
dst(x,y) = 0, if src(x,y)>T(x,y)
max_value, otherwise
其中TI 是为每一个象素点单独计算的阈值
对方法CV_ADAPTIVE_THRESH_MEAN_C,先求出块中的均值,再减掉param1。
对方法CV_ADAPTIVE_THRESH_GAUSSIAN_C ,先求出块中的加权和(gaussian),再减掉param1。
关于二值化函数cvAdaptiveThreshold和cvThreshold的一些发现
2013年01月30日⁄ 综合⁄ 共1221字⁄ 字号小中大⁄评论关闭
1、函数cvAdaptiveThreshold的确可以将灰度图像二值化,但它的主要功能应该是边缘提取,并且参数param1主要是用来控制边缘的类型和粗细的,这些在软件自带的参考手册中均未提及。
cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value, int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C),
int threshold_type CV_DEFAULT(CV_THRESH_BINARY), int block_size CV_DEFAULT(3), double param1 CV_DEFAULT(5));
分析参数blockSize。
这个参数相当重要,1.要取奇数,如果取偶数运行后就会报错!!原因看源码,发现要做一个掩模,所以参数必须是奇数。
OpenCV也做了一个检测,在函数adaptiveThreshold一开始就有CV_Assert(
blockSize % 2 == 1 && blockSize > 1 )。
2.cvAdaptiveThreshold既可以做边缘提取,也可以实现二值化,是由你所选择的邻域所确定的,如果你所选择的邻域非常小(比如3×3),那么很显然阈值的“自适应程度”就非常高,这在结果图像中就表现为边缘检测的效果。
如果邻域选择的比较大(比如31×31),那么阈值的“自适应程度”就比较低,这在结果图像中就表现为二值化的效果。
3.一般情况下,滤波器宽度应该大于被识别物体的宽度。
block_size太小,无法代表背景,太大的话会影响到临近物体。
选定合适的block_size后,我们就可以选定一个更大的阈值param1,更好的抑制噪声
1)自适应二值化计算像素的邻域的平均灰度,来决定二值化的值。
2)如果整个区域几乎是一样灰度的,则无法给出合适的结果了。
3)之所以看起来像边缘检测,是因为窗尺寸设置的小,可以改大一点试一试。
cvAdaptiveThreshold( src, dst, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 21); //窗设置为21
4)自适应阈值化中的阈值完全是由你所选择的邻域所确定的,如果你所选择的邻域非常小(比如3×3),那么很显然阈值的“自适应程度”就非常高,这在结果图像中就表现为边缘检测的效果。
如果邻域选择的比较大(比如31×31),那么阈值的“自适应程度”就比较低,这在结果图像中就表现为二值化的效果。
我目前在做细胞图像分割,在HSV色彩系统中对V通道用自适应阈值化,然后在叠加HS通道处理结果,取得了非常好的效果。
没有万能的二值化方法,具体问题具体分析,自适应二值化对于光照不均的文字,条码等,效果很好。
窗口大小选择,考虑被检测物体尺寸。
函数名:cvAbsDiff
功能:calculates absolute difference between two arrays.
用法:void cvAbsDiff(const CvArr* src1, const CvArr* src2, CvArr* dst);
说明:src1 The first source array
src2 The second source array
dst The destination array
dst(i)c = |s rc1(I)c − src2(I)c |
All the arrays must have the same data type and the same size (or ROI size).
它可以把两幅图的差的绝对值输出到另一幅图上面来。
在QQ游戏里面有一款叫做"我们来找茬",就是要找两幅图的不同点,下面是代码实现:。