自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大坡3D软件开发

自主操作系统和CPU--用软件来改变世界

原创 在OpenCV里实现膨胀

在前面学习了腐蚀的过程,就是根据结构元素范围里在图片找最小值作为输出,如果把这个找最小值修改一下,改为找最大值,那么这个算法就叫做膨胀了。同样邻域的形状由结构元决定,既然取邻域内的最大值,那么膨胀后的输出图像的总体亮度的平均值比起原图会有所上升,图像中较亮的物体的尺寸会变大;相反,较暗物体的尺寸会...

2019-09-30 21:14:27 195 0

原创 在OpenCV里实现腐蚀

在这里将开始学习形态学,什么是形态学呢?形态学,即数学形态学(mathematical Morphology),是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质(最具区分能力-most discriminativ...

2019-09-30 18:24:21 330 0

原创 在OpenCV里实现二值图的逻辑运算

在前面学习了阈值分割,这样得到的图像往往是二值图,有了二值图之后就可以利用二值图之间进行逻辑运算,在OpenCV里提供了bitwise_and、bitwise_or、bitwise_xor、bitwise_not这四个按位操作函数。 bitwise_and是对二进制数据进行“与”操作,即对图像(...

2019-09-29 16:53:25 316 0

原创 在OpenCV里实现自适应阈值分割

在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所有的信息提供保留。实验室环境下,相应的素材是模板化的,但是将实验室方法应用于现实环境中时,我们会发现光影环境对于效果的影响其实是很大的。在这种情况下进行处理,会使得结果不如人意:一块黑,一块白,且黑的区域的特征无法提取...

2019-09-27 08:27:30 890 0

原创 在OpenCV里实现全局阈值分割5

接着下看THRESH_TRIANGLE算法,三角法求阈值最早见于Zack的论文《Automatic measurement of sister chromatid exchange frequency》主要是用于染色体的研究,该方法是使用直方图数据,基于纯几何方法来寻找最佳阈值,它的成立条件是假设...

2019-09-26 16:11:53 104 0

原创 在OpenCV里实现全局阈值分割4

在前面五种类型里,都是设置根据阈值进行设置的,但是怎么样来决定阈值是多少,那是根据手动来设置的。由于很多情况之下,可能不能人工地设置阈值,那么就需要有算法来根据图像自动计算阈值。在OpenCV里已经有两种自动计算阈值的方法:THRESH_OTSU和THRESH_TRIANGLE。首先来看THRES...

2019-09-26 15:48:25 221 0

原创 在OpenCV里实现全局阈值分割3

接着下来看THRESH_TRUNC类型,这个类型与前面两个类型的区别在于最大值不起作用,而是让大于阈值的像素值全部等于阈值。演示例子如下: #python 3.7.4,opencv4.1 #蔡军生 https://blog.csdn.net/caimouse/article/details/5...

2019-09-25 16:22:18 116 0

原创 在OpenCV里实现全局阈值分割2

接着下来再看THRESH_BINARY_INV类型,它的意思就是与THRESH_BINARY相反,比如大于阈值时THRESH_BINARY设置为最大值,THRESH_BINARY_INV类型设置为0。演示的例子如下: #python 3.7.4,opencv4.1 #蔡军生 https://b...

2019-09-25 08:33:36 152 0

原创 在OpenCV里实现全局阈值分割1

在前面学习了平滑的处理,接着下来将要学习图像分割。当人们观察一个图片时,会把图片里的物体进行分割出来,这样才能知道这张图片里包含有什么物体,然后根据物体的形态进行理解。因此在图像处理里,如果能把图像里的物体分割出来,再进行归类,就可以进一步地进行识别出来。图像分割(image segmentati...

2019-09-24 17:01:21 441 0

原创 在OpenCV里实现导向滤波

前面学习了双边滤波和联合滤波,都可以保边滤波,计算方式比较类似,都是使用相似性权重模板,下面来介绍一种不依赖于权重模板的保边滤波的另外一种方法—导向滤波。导向滤波比前面两种滤波优点有计算速度快,并且细节增强,平滑效果更好。导向图滤波是一种图像滤波技术 ,通过一张引导图G(导向图),对目标图像P(输...

2019-09-23 17:56:37 198 0

原创 在OpenCV里实现联合双边滤波

在前面学习了双边滤波,虽然实现保边平滑的效果,但是平滑效果有时候不如高斯平滑。那么有没有改进的方法呢?这里来回忆一下,前面双边滤波里,使用原图像的灰度相似度作为相似算法,是否可以从这里下手呢?其实是可以的。可以先对原图像进行高斯平滑,然后把这幅图像的灰度值作为计算相似度,替代双边滤波里的原图像相似...

2019-09-23 16:00:34 211 0

原创 在OpenCV里实现双边滤波

前面学习了高斯平滑、均值平滑,在一些图像处理里非常有效果,但是它在去除噪声同时,也把图像的边缘进行模糊。现在就得考虑有没有这样方法,既可以平滑图像,又可以保留图像边缘的信息。我们来回顾一下前面使用的高斯平滑,其实是构造一个正态分布的矩阵,以中心点像素为主,周边距离远的像素为次,这样是按距离进行加权...

2019-09-20 11:59:12 245 0

原创 在OpenCV里实现中值平滑

图像去噪是进行数字图像处理的一个基本环节,而中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,其基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。中值滤波是一种典型的非线性滤波,是基于排序统计理论的一种能够...

2019-09-19 16:57:04 269 0

原创 在OpenCV里实现均值平滑5

从前面来看已经可以把积分图像的功能集成到OpenCV里,那么在它里面也有相应的均值平滑的函数cv2.blur,这个函数实现的功能与前面实现快速计算平滑的方法是一样的,只不过它可以处理彩色图像,因为它可以把彩色图片进行分离成三个颜色的图像进行平滑,再合并回来。它的定义如下: src 输入图像 ...

2019-09-18 16:16:40 117 0

原创 在OpenCV里实现均值平滑4

前面为了说明原理,采用自己实现的积分图像的计算方法,其实这种方法也是OpenCV里实现的算法,那在OpenCV里有没有相同的实现函数呢?这是有的,它就是cv2.integral函数,它的定义如下: 第一个参数src,可以使灰度图或RGB彩色图,单通道和三通道均可作为输入,但每个通道的精度必须...

2019-09-18 15:54:36 131 0

原创 在OpenCV里实现均值平滑3

有了前面的积分图像之后,就可以采用下面的公式来快速地计算均值平滑: 这个公式就是前面计算面积的公式,因此可以把均值平滑的算法写成这样: #python 3.7.4,opencv4.1 #蔡军生 https://blog.csdn.net/caimouse/article/details/...

2019-09-16 18:17:35 224 1

原创 在OpenCV里实现均值平滑2

通过均值可以实现平滑的效果,不过这样采用卷积的方式来计算还是不够快,即使是使用了分离的卷积计算。由于均值的特殊性,可以针对这种卷积计算进行优化。我们知道计算均值就是把所有元素加到一起,然后再除以个数。由于图像很大,而卷积算子很小,那么就相当于一个窗口不断地滑动在图像上,并且计算这个窗口的和,那么有...

2019-09-16 17:11:46 481 0

原创 在OpenCV里实现均值平滑1

前面学习了高斯平滑,其实就是使用卷积对图像的操作,卷积核的数据采用了二维正态分布,那么沿着这个思路,我们来把卷积核修改为不同的方式,那么这样的平滑是否也有意义,也能达到我们的目的呢。在这里就来进行一个修改,前面是使用高斯函数,在这里不使用这个了,而是使用平均值的方式。假设一个卷积核高为h,宽为w的...

2019-09-12 10:54:21 232 0

原创 在OpenCV里实现高斯平滑6

前面可以看到使用分离的高斯卷积核来计算平滑更快,不过前面使用的卷积函数是采用scipy里的,现在我们来采用OpenCV里函数sepFilter2D来计算,它的定义如下: dst=cv.sepFilter2D(src, ddepth, kernelX, kernelY[, dst[, anchor...

2019-09-12 08:21:03 372 0

原创 在OpenCV里实现高斯平滑5

基于可分离的高斯矩阵的卷积,并且计算量还少,那么OpenCV也提供了相应的函数getGaussianKernel来计算高斯平滑,这个函数主要用来计算一维垂直方向的高斯卷积核,它的定义如下: retval=cv.getGaussianKernel(ksize, sigma[, ktype]) 其...

2019-09-11 16:45:11 208 0

原创 在OpenCV里实现高斯平滑4

上面通过代码构造了高斯算子,并且使用二维的卷积运算来平滑图像,也达到了目标,不过还有一个问题,就是当你处理比较大的图片,或者比较大的高斯矩阵时,就会发现计算的时间很长。这时候我们就要考虑有没有高效快速的算法了,再回过头来审视一下二维高斯函数: 可以看到最后的等式,再考虑指数的运算法则: ...

2019-09-11 11:38:42 184 0

原创 在OpenCV里实现高斯平滑3

在上面了解图像扩展的方式,也就是明白了扩展参数的作用,接着下来要明白为什么要叫做高斯平滑了,因为这个函数里使用了高斯分布,如果对高斯分布很陌生的话,或许听说正态分布,这个分布经常会使用到。高斯平滑,也有另外一种叫法:高斯滤波。高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪...

2019-09-11 08:37:09 218 0

原创 在OpenCV里实现高斯平滑2

在上面这个例子里使用了高斯平滑函数cv2.GaussianBlur(),就可以让点阵的图片进行细腻化,模糊化,其实也是一个滤镜的作用。现在回过头来看一下,高斯平滑是怎么样实现的,又是怎么样进行卷积运算。在进行下一步之前,先来看一下函数cv2.GaussianBlur()的定义,如下: dst=c...

2019-09-10 15:51:04 180 0

原创 在OpenCV里实现高斯平滑1

在前面复习了卷积的运算,以及使用python里的函数进行计算卷积,理解到卷积的过程,其实在图像里就是其中一点像素值可以与它周围的像素值进行加权求和,这就意味着输出的像素值是作为平均计算,因此该点的像素值由这点和这点周围的像素来决定了。理论上怎么样推导,怎么样计算,可以先放下来,首要的问题是先来感觉...

2019-09-10 09:27:54 255 0

原创 在OpenCV里实现二维离散卷积3

从结果里可以看到,当卷积使用full计算时,输出结果会比原来输入的图像变大,这样会破坏图像的大小,如果经过几遍这样的计算,图像就会变得非常大,有时候这种输出结果会导致问题出现。那么有没有输入图像与输出图像一样大小的卷积运算呢?是有的,就是same模式计算,如下图: 当卷积核的中心(K)与im...

2019-09-09 11:07:46 186 0

原创 在OpenCV里实现二维离散卷积2

上面了解了整个二维卷积的计算过程,那么接着下来,需要看看在代码里怎么样实现这样的计算,方法当然有很多,比如自己编写代码把整个算法实现,也可以采用python的科学计算库Scipy里的功能,还可以使用OpenCV的功能。在这里主要学习后面两种卷积的编程方法。 先来学习使用scipy的方式,如果你的...

2019-09-09 09:34:49 345 0

原创 在OpenCV里实现二维离散卷积1

在前面学习的内容主要是对图像进行增强的操作,不过图像可能还有某种干扰的像素,这些像素可能是由噪声引起的,噪声可以理解为由一种或多种原因造成的灰度值的随机变化,比如电磁波通讯时受到干扰。为了解决这个问题,在大多数情况之下,通过平滑技术(或称为滤波技术)进行抑制或者消除,常用的平滑处理算法包括二维离散...

2019-09-07 22:38:07 3062 0

原创 在OpenCV里实现限制对比度的直方图均衡化

下面将要介绍功能强大、用途广泛、影响深远的对比度有限的自适应直方图均衡(CLAHE,Contrast Limited Adaptive Histogram Equalization)算法。尽管最初它仅仅是被当作一种图像增强算法被提出,但是现今在图像去雾、低照度图像增强,水下图像效果调节、以及数码照...

2019-09-07 09:34:58 262 0

原创 在OpenCV里实现全局直方图均衡化2

上面是根据原理,使用自己编写的算法来实现全局直方图均衡化,接着下来,就是使用OpenCV里的函数cv2. equalizeHist()来计算,这个函数计算步骤如下: 采用这个函数来计算相同的图片的例子: #python 3.7.4,opencv4.1 #蔡军生 https://blog....

2019-09-06 17:54:28 300 0

原创 在OpenCV里实现全局直方图均衡化1

前面学习过直方图的概念,也学习过它的算法实现,也看到相应的图示。从这么多直方图里,是否看得出来一些门道呢?经过经验的积累,会发现清晰的图片,都有一个特点,就是直方图比较平坦,像素分布比较平均。由于环境或摄像机的问题,导致某些图片不清晰,从直方图上来看就是要么过度集中在右边,或者左边,或者中间,对于...

2019-09-06 16:31:06 223 0

原创 在OpenCV里实现伽马变换

在前面学习了图像的线性变换,接着下来介绍常用图像非线性变换—伽马变换(Gamma变换)。Gamma变换是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: 这个指数即为Gamma。 Gamma变换就是用来图像增强,其提升了暗部细节,简单来说就是通过非线性变换,让...

2019-09-05 16:39:35 1019 0

原创 在OpenCV里实现正规化变换2

上面学习了L1范数,还有L2范数,那么什么是范数的分类呢?其实要从数学上一条公式来分析出来,这个公式如下: Lp=|x|p=(i|xi|p)1p 在这条公式里,根据p值来取不同的值来分类, P=1-范数:║x║1=│x1│+│x2│+…+│xn│ (曼哈顿距离) P=2-范数:║x║2=(...

2019-09-05 11:35:18 264 0

原创 在OpenCV里实现正规化变换1

前面学习了直方图正规化变换,采用的是等比例缩放方式,这种方式理解起来比较简单和形象。但是在图像正规化里,计算的方式有很多种,源于人们对距离的认识不同。说到距离,那么我们就要从中学的绝对值开始了,比如温度计就是常用的一种工具,早上温度为0度,中午为10度,那么温度相差为10度,这个就是温度的差,也是...

2019-09-04 17:45:59 167 0

原创 在OpenCV里实现直方图正规化变换

前面的线性变换的参数需要根据不同的图像进行合理的选择,这样就比较麻烦,我们希望有一种基于当前图像情况自动地选择参数的方法,一般情况下会选择直方图正规化。 下面可以使用python来按上面公式来检验这个方法是否可行,例子代码如下: #python 3.7.4,opencv4.1 #蔡军生 ...

2019-09-04 09:09:53 232 0

原创 在OpenCV里实现图像线性变换

在前面学习了什么叫做灰度直方图,知道图像对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,范围越大说明对比度越高。低对比度的图像在视觉上给人的感觉是看起来不够清晰,因此需要通过算法来调整图像的灰度值,从而使用图像更加清晰起来,最容易理解的算法就是线性变换的算法。对于图像矩阵的线...

2019-09-03 16:02:48 424 0

原创 在OpenCV里实现灰度直方图3

最后使用OpenCV里的函数来实现灰度直方图的统计,这个函数定义如下: cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) #返回hist 第一个参数必须用方括号括起来。 第二个参数是用于...

2019-09-03 10:00:18 243 0

原创 在OpenCV里实现灰度直方图2

上面这个程序主要用来说明灰度直方图的计算原理,使用起来还是有点不方便,下面使用matplotlib里的功能来实现相应的统计,这样就更加节省代码,使用起来更加方便。下面来看一下hist函数的定义: 函数:matplotlib.pyplot.hist(x,bins=None,range=None, ...

2019-09-03 09:09:42 177 0

原创 在OpenCV里实现灰度直方图1

有时候,我们看到一张照片它不清楚,那么这个不清楚用什么来表示,或者说评价呢?其实我们在使用数码相机时有很多参数,其中有一项有关曝光的图表最容易被人忽略,也最难理解,它就是相机内自带的曝光助手—直方图。现在就来理解直方图的世界,了解直方图的奥秘。 灰度直方图是关于灰度级分布的函数,是对图像中灰度级...

2019-09-03 09:05:40 770 0

原创 在OpenCV里实现极坐标变换5

前面使用OpenCV旧的函数做了极坐标变换,随着OpenCV的发展,又增加了一个新的极坐标变换函数,以便替换前面两个函数。这次就来学习这个新的极坐标变换函数,这个函数定义如下: 这个函数可以映射到极坐标变换或者半极坐标变换。其中参数定义如下: src是输入图像数组; dst是输出图像数组...

2019-09-02 09:26:58 304 0

原创 在OpenCV里实现极坐标变换4

前面使用自己定义插值算法来实现极坐标变换,现在来使用OpenCV里面函数来实现极坐标变换,主要有两个函数:线性极坐标函数linearPolar和对数极坐标函数logPolar。这两个函数分别定义如下: dst = cv.linearPolar(src, center, maxRadius, fl...

2019-09-02 08:35:55 290 0

提示
确定要删除当前文章?
取消 删除