白话文讲计算机视觉-第十讲-灰度阈值分割
灰度阈值是啥意思呢?我们慢慢说。
1.灰度图
我们现在有一张彩色图,我们给它用黑白的方式变现,就形成灰度图,如图所示。
图1
那究竟怎么转换的呢?很简单,我们根据如下公式,把BGR三个通道换成一个Gray通道(0~255):
Gray = R*0.299 + G*0.587 + B*0.114
其中,R,G,B分别代表的是R,G,B三个通道的值(0~255)。
用python语句导入灰度图只需要在导入图像时候后面多一个0即可:
img = cv2.imread("linetest.jpg", 0)
2.灰度直方图
灰度直方图很容易理解,就是我们有一张灰度图,如图1那张。这张图是800*858的尺寸的图。也就是说,该图里面有686400个像素点,每一个像素都对应一个值(0~255),然后我们统计一下0~255这些值共有多少个,并画出统计图:
图2
看图2,输入色阶里面从左到右分别对应的是0~255这些数值的数目。我们发现,这里面亮的点不少(接近255),暗的很少(接近0),不亮不暗的占大多数(中间的值)
3.阈值分割
我们选择0~255之间的一个值,比如150,然后小于等于150都给它变成0,大于150的都给他变为255,这样,我们的图里面就只有两个颜色(黑、白)了。分割后的图像为二值图像,如图3所示:
图3
我们可以使用PYTHON代码来执行这个阈值分割:
ret, thresh = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY)
该语句表示:将灰度图像img进行二值化处理,灰度小于150的为0,大于的255
ret: 输入的阈值
thresh : 处理好的图片
cv2.THRESH_BINARY:表示根据灰度小于阈值的为0,大于的255。
确定一个最佳阈值,使背景和目标之间的差异最大,能够有效地分离背景和前景。那么怎么找阈值呢,我们引入大津算法。
4大津算法
有个小日子叫大津展之(おおつのぶゆき),他在1979年时候发明了一个针对二值化的确定最佳阈值有效方法。
图4
这个算法是怎么运行的呢,特别简单。
(1)假定我们灰度图是5*5的尺寸的图。也就是说,该图里面有25个像素点,那么我们设定一个N=25
(2)接下来,我们求一下个灰度值的概率。P_i=n_i/N,其中ni为灰度值i的像素个数。例如,灰度值为150的有5个,那么P_150=n_150/N=5/25=1/5=0.2。
(3)然后我们从阈值为0开始,进行阈值分割为{G1,G2}两组,分别为小于0组G1,大于等于0的组G2。(灰度值小于等于1的都为0,大于1的都为255。)就可以得到G1的总概率值w0,G2的总概率值w1:
也可以得到G1、G2的平均值:
整个图像的灰度平均值、方差可以通过如下式子求得:
当我们求完阈值为0的情况的方差之后,我们进行阈值为1,2,3。。。。。一直到254时候的平均值,方差。然后我们选择方差最大情况下的阈值T,作为我们最终的阈值。
上面的公式我们在其它阈值T下遍历时,可以改为:
我们可以使用PYTHON代码来执行这个大津算法,执行的结果如图5所示:
ret2,thresh2= cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
图5
最后奉上全部代码:
# 导入类库
import cv2
import numpy as npif __name__ == '__main__':# 读入灰度图片img1 = cv2.imread("linetest.jpg")img2 = cv2.imread("linetest.jpg", 0)# 显示图片cv2.imshow('orgin1', img1)cv2.imshow('orgin2', img2)#阈值分割ret1, thresh1 = cv2.threshold(img2, 150, 255, cv2.THRESH_BINARY)#大津算法ret2, thresh2 = cv2.threshold(img2, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 显示图片cv2.imshow('orgin3', thresh1)cv2.imshow('orgin4', thresh2)# 按任意键退出cv2.waitKey()cv2.destroyAllWindows()
以上就是阈值分割的所有内容啦!
白话文讲计算机视觉-第十讲-灰度阈值分割相关推荐
- ceres快速教材及学习笔记(四)bundl adjustment,《视觉slam十四讲》第十讲ceres例子
0. 前言 本文是根据ceres官方教程内容ceres-solver官方教程链接,再结合自己理解的一个ceres快速学习笔记. 在博文ceres快速教材及学习笔记(一)hello,world!中,我们 ...
- 白话文讲计算机视觉-第六讲-轮廓检测算法
大家好,欢迎收听小木的第六讲,第六讲我们主要讲的内容是轮廓检测.说道轮廓检测.轮廓怎么检测呢,那么我们就要引入一个轮廓检测算法: 这个算法是日本的铃木桑发明的.这位日本人写了一篇论文,叫做: Topo ...
- 王佩丰excel2010基础教程学习笔记(第六讲到第十讲)
选中数据所在区域,选择插入--数据透视表即可生成数据透视表. -- 将字段放入选定的区域,可以自由定制透视表. 在值字段区域右键可以选择不同的显示和汇总方式. 双击值字段的数据可以获取其源数据. 行列 ...
- 王佩丰excel2010基础教程学习笔记(第十六讲到第二十讲)
简单文本函数:left,right,mid,find left()函数有两个参数,参数一是字符串所在单元格,参数二是从字符串左边开始取几位. 从字符串左边开始取三位. right()函数一样,不过是从 ...
- 视觉SLAM十四讲学习笔记-第二讲-初识SLAM
专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 "定位"和"建图",可以看成感知的"内外之分". ...
- 动手学ocr·十讲--学习笔记一
动手学ocr·十讲 技术导论 课程链接请点击这里 1.1 OCR技术背景: OCR是什么 OCR(Optical Character Recognition,光学字符识别)是计算机视觉重要方向之一.传 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- 《突破C#编程实例五十讲》源文件下载(2)
上接<<突破C#编程实例五十讲>源文件下载(1)> 有兴趣的朋友下载看看吧,一共有9个压缩包分3篇文章,下载要注意哦,不然解压要出错哦! 转载于:https://blog.51 ...
- 趣谈网络协议笔记-二(第十讲)
趣谈网络协议笔记-二(第十讲) UDP协议:因性善而简单,难免碰到"城会玩" 自勉 如果手上没有剑,我就无法保护你.如果我一直握着剑,我就无法抱紧你.--<Bleach> ...
最新文章
- android listview edittext 焦点冲突,Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法...
- AOP 注入失败的问题
- 1.CentOS安装Redis
- 华南理工计算机网络随随堂,计算机组成原理-2019春华工网络教育随堂练习
- labview霍夫曼编码_哈夫曼编解码压缩解压文件—C++实现
- 《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现2
- Orchard之生成新模板
- 【其他】学习通下载任务点里的PPT三步走
- 求$N^N$的首位数字
- java 索引实现,Java创建ES索引实现
- 新华三(H3C)校园招聘技术类笔试题2019
- H5开发,打包成APK
- 04-乐优商城项目搭建
- Protues8.6仿真STM32出现错误-VDDA和VSSA的问题解决办法
- CSDN-Markdown语法集锦
- 是真正的发现,还是可耻的堕落?
- 多文件批量下载打包成.zip
- 中国资源卫星应用中心_数据下载
- TI 927 928 947 948 940串行器解串器系列
- Gym - 100519 B Bring Your Own Bombs 离散化+二分+思维
热门文章
- 短信登录、短信注册,(仅供参考)
- 跑步训练 python
- tif、bmp、jpg、png有什么区别
- “小身材高精度”千巡翼X1多场景应用案例
- Android 百度地图获取两点之间的距离和推荐的驾车路线
- 安卓linux辅助软件下载,安卓自动点击器pro
- Android ConstraintLayout 设置子 view maxWidth 是父 ConstraintLayout width 的百分比
- 百度人脸识别api使用BASE64传输图片一直报错222203
- java if return 语句_Java 语言中的 return 语句
- 毕业四年同学聚会,性格决定命运----作者:伤心小叶