arcgis图像二值化,arcgis栅格二值化
系列文章
Python OpenCV图像处理()—— OpenCV框架及图像插值算法
Python()——几何变换中的OpenCV图像处理
Python CV图像处理(3) 3354色彩空间交换
OpenCV图像处理(IV) 3354图像过滤
OpenCV图像处理(V) 3354图像阈值和二值化
OpenCV图像处理(VI) 3354边缘检测
目录、图像阈值和二值化5.1简介5.2简单阈值5.3最大类间方差法(Otsu阈值法)5.4自适应阈值
动词(verb的缩写)介绍图像阈值和二值化5.1
图像阈值分割是图像分析、特征提取和模式识别前必不可少的图像预处理过程。图像阈值化的目的是根据灰度划分像素集合,得到的每个子集将形成与真实场景相对应的区域。每个区域都具有相同的属性,但相邻区域不相同。
5.2简单门槛在这里,问题很直白。对于每个像素,应用相同的阈值。如果像素值小于阈值,则将其设置为0,否则将其设置为最大值。函数cv.threshold用于应用阈值。第一个参数是源图像,它应该是灰度图像。第二个参数是阈值,用于对像素值进行分类。第三个参数是分配给超过阈值的像素值的最大值。OpenCV提供了不同类型的阈值,这些阈值由函数的第四个参数给出。使用简历。THRESH_BINARY类型。所有简单的阈值类型都是
对于图像阈值分割,最简单的方法是,像素值高于阈值(TH)就设为最大值,低于阈值就设为最小值。比如像素值为0~255的图像,如果大于TH,则设置为255。小于th,设置为0。这种简单的方法也称为二值化。可以用cv2。OpenCV中的THRESH_BINARY。常见的简单阈值分割示意图如下:
二值阈值化——像素值大于阈值的设为最大值,小于阈值的设为最小值,大于阈值的设为最小值,小于阈值的设为最大值,大于阈值的设为阈值,小于阈值的设为0,大于阈值的设为0。保持原始像素值低于阈值,并将其设置为0 ——。保持原始像素值高于阈值,并将其设置为低于阈值的0。这些简单的阈值方法对应于OpenCV中的函数,如下所示:
2.Thresh _ binarycv2。Thresh _ binary _ invcv2。Thresh _ truncv2。Thresh _ toZerocv2。Thresh _ to zero _ inv这些函数有两个返回值,第一个返回值是使用的阈值,第二个返回值是阈值化后的图像。
实现
# % % import cv2 import numpy as NP from matplotlib import py plot as pl timg=cv2 . im read( Lena . jpg ,0)ret,thresh1=cv2.threshold(img,127,255,cv2。THRESH_BINARY)ret,thresh2=cv2.threshold(img,127,255,cv2。THRESH_BINARY_INV)ret,thresh3=cv2.threshold(img,127,255,cv2。THRESH_TRUNC)ret,thresh4=cv2.threshold(img,127,255,cv2。THRESH_TOZERO)ret,thresh5=cv2.threshold(img,127,255,cv2。THRESH_TOZERO_INV)titles=[原始图像,二进制,二进制_INV , TRUNC , TOZERO , TOZERO_INV]images=[img,thresh1,thresh2,thresh3,thresh4,THRESH 5]for I in range(6):plt . subplot(2,3,1),PLT .IM SHOW (images [I], gray) #避免灰度图像PLT的颜色映射。标题(标题[I]) PLT。x ticks([])、PLT . y ticks([])# remove scale # PLT . save fig( big pic _ 2 . png )PLT . show()cv2 . im show( binbin ,thresh 1)cv2 . im show( binbin thresh 2)cv2 . im show( TRUNC ,thresh3)cv2.imshow(TOZERO ,thresh4)cv2.imshow(TOZERO_INV ,thresh5)cv2.waitKey(中
5.3最大类间方差法(OTSU阈值法)对于图像二值化的简单阈值法,我们需要自己提供一个阈值,而Otsu法可以根据图像特点选择最佳阈值,因此也被认为是图像分割中阈值选择的最佳算法,计算简单,不受图像亮度和对比度的影响。从Otsu法的原理来看,这种方法又叫最大类间方差法,因为根据Otsu法得到的阈值对图像进行二值分割后,前景和背景图像的类间方差最大。
它根据图像的灰度特性将图像分为背景和前景两部分。方差是灰度分布均匀性的度量。背景和前景之间的差异越大,图像的两个部分之间的差异就越大。当前景的一部分被误认为背景或者背景的一部分被误认为前景时,两部分的差别会变小。因此,最大化类间方差的分割意味着最小的误分类概率。
应用:这是寻找图像全局阈值的最佳方法。应用不言而喻,适用于大多数需要图像全局阈值的场合。
优点:计算简单快速,不受图像亮度和对比度的影响。
缺点:对图像噪点敏感;只能针对单个目标进行拆分;当目标和背景大小比例较宽,类间方差函数可能出现双峰或多峰时,此时效果不好。
原理很简单,涉及的知识点是均值、方差等概念和一些公式推导。为了便于理解,让我们从目的出发,把著名的OTSU算法推回去。
找出类别之间的差异:
OTSU算法的假设是,存在一个阈值TH,将一幅图像中的所有像素分为C1(小于TH)和C2(大于TH)两类,那么这两类像素各自的平均值为m1和m2,图像的全局平均值为mG。同时,像素被分类到C1和C2类别的概率分别是p1和p2。因此,有:
根据原文,公式(4)可以进一步修改:
# % % import cv2 import numpy as NP from matplotlib import py plot as pltmg=cv2 . im read( Lena . jpg ,0) # global threshold ret1,TH1=cv2.threshold (img,127,255,2 .thresh _ binary)# otsu Threshold ret 2,TH2=cv2.threshold (img,0,255,cv2 . thresh _ binary cv2 . thresh _ Otsu)cv2 . im show(原图,img) cv2.imshow(二进制),TH1) CV2.imshow (OTSU ,TH2)cv2 . waitkey(0)cv2 . destructily Windows()5.4自适应阈值无论是前面的简单阈值法还是后面的Otsu算法,这些算法都属于全局阈值法,所以
根据图像中的每个小区域,计算相应的阈值。因此,在同一幅图像的不同区域使用不同的阈值,这样我们就可以在不同的亮度下得到更好的结果。
这个方法要求我们指定三个参数,并且只有一个返回值。
自适应方法指定计算阈值的方法。
-cv2。ADAPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值。
-CV2。Adaptive _ thresh _ Gaussian _ C:阈值取自相邻区域的加权和,权重为滑稽谷物窗口。
大小邻域大小(用于计算阈值的区域大小)
c是常数,阈值等于平均值或加权平均值减去这个常数。
# % % import cv2 import numpy as NP from matplotlib import py plot as pl timg=cv2。我读(’18。png ,0)ret,th1=cv2.threshold(img,127,255,cv2 .THRESH_BINARY)# Otsu阈值ret2,th2=cv2.threshold(img,0,255,cv2 .THRESH_BINARY cv2 .OTSU)# 11为块大小,2为C值th3=cv2.adaptiveThreshold(img,255,cv2 .自适应_阈值_均值_C,cv2 .THRESH_BINARY,11,2)th4=cv2。自适应阈值(img,255,cv2 .自适应_阈值_高斯_C,cv2 .THRESH_BINARY,11,2)titles=[原始图像,全局阈值(v=127), otus阈值,自适应均值阈值,自适应高斯阈值]images=[img,th1,th2,th3,th4]for I in range(5):PLT。subplot(2,3,i 1),plt.imshow(images[i], gray )PLT。标题(标题[I])plt。xticks([]),plt.yticks([])#plt.savefig()
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。