二值化

Intel RealSense SR300 Coded light depth Camera

房东的猫 提交于 2019-12-10 16:04:05
深度重建 深度重建管道由两个主要模块组成。首先,码字提取模块为每个像素提取码字。它计算每个输入帧中的每个像素是否被照亮。此外,还计算了模式转换的亚像素位置信息。其次是深度生成模块,一旦所有模式都被投射,它就会被激活。它利用码字和标定数据重建每个像素处的深度。此外,它增强了图像的深度。深度重建管道的流程图如图5所示。 码字提取阶段 码字提取以传感器输入图像的帧率(通常为600帧/秒)进行操作,其主要目标是评估每个像素的码字。码字提取管道主要包括两个步骤:归一化、二值化和亚像素估计,具体如下: 这个模块的输入是灰色模式的图像。我们使用了9个灰色代码模式,表示为P0,…,P8和两个参考图像:一个完全发光的图像(记为I 1)和一个不发光的图像(记为I 0)。投影序列是I0, I1 P0…,P8。经过大量的调优和对光学算法实现的权衡,我们发现9种模式提供了最佳的性能。通过9种模式,场景被总共511个过渡投影,在全传感器分辨率中,每超过1个像素就有一个过渡,这将深度空间“横向”分辨率限制在大约1.25个像素。 当一个参考模式 I 0 / I 1 I 0 / I 1 I 0 / I 1 被投影时,它被存储在内存中,以供以后对 P 0 − P 8 P 0 - P 8 P 0 − P 8 的投影模式进行规范化。码字提取阶段的输出是一个每像素9位码字的帧,标记表示像素的有效性和二进制转换的亚像素位置

图像二值化

邮差的信 提交于 2019-12-10 01:03:33
图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。 在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。 来源: CSDN 作者: 理想丶 链接: https://blog.csdn.net/weixin_43838785/article/details/103463928

图像识别技术——验证码识别

六月ゝ 毕业季﹏ 提交于 2019-12-09 12:51:33
[1] 一、数字图像处理基础 一幅图像可以定义为一个二维数组f(x,y),这里x,y是空间坐标,而在任何一对空间坐标(x,y)上的幅值f称为该点图像的强度或灰度。当x,y和幅值f为有限的、离散的数值时,称该图像为数字图像。 自然界呈现在人眼中的图像是连续的模拟信号,在计算机处理前,必须用图像传感器把光信号转换为表示亮度的电信号,再通过取样和量化得到一副数字图像。取样是对图像在坐标上进行离散化的过程,每一个取样点称为一个像素。量化是对图像灰度上的离散化过程。取样后将得到M*N个像素,每个像素量化得到一个灰度值L,以L表示灰度值的允许取值范围,则数字图像存储需要的比特数b可以表示为: 图像的灰度值取值范围被称为图像的动态范围。把占有灰度级全部有效段的图像称为高动态范围图像,高动态范围图像有较高的对比度。相反,地动态范围的图像看上去是冲淡了的灰暗格调。 二、图像的预处理: 主要是对图像进行灰度化、二值化、抑噪(滤波)等技术。 1、图像的灰度化 RGB系统中一个颜色值由3个分量组成,这样的图像称为彩色图像,RGB系统称为颜色空间模型。常见的颜色空间模型还有HSI、CMYK等。如果一幅图像的颜色空间是一维的(一个颜色值只有一个颜色分量),则这幅图像就是一副灰度图。在位图图像中,一般以R=G=B来显示灰度图像。 图 1 原始图片 常用的灰度化方法有以下三种: (2.1) (2.2) (2.3)

Halcon实现边缘提取

蹲街弑〆低调 提交于 2019-12-07 16:04:07
一、边缘提取 1、设置ROI兴趣区域 2、快速二值化,并连接相邻区域。 这样做的目的是进一步减少目标区域,通过二值化将目标区域大概轮廓提取出来 3、提取最接近目标区域的轮廓 常用函数有boundary,gen_contour_region_xld 4、根据自己的需求提取需要的初步轮廓 5、将初步提取的初步轮廓进行膨胀操作 6、将膨胀后的区域和原图进行减操作(在这步之前有可能需要对原图进行高斯滤波)。这样就能得到只 有边缘的真实图像 7、用canny或其他算子(根据需要)提取亚像素轮廓,一般使用edges_sub_pix函数 8、处理和计算 得到真实的边缘XLD后你可能需要进一步处理得到你想要的线、弧等。 你可能用到的函数segment_contours_xld(分割) union_collinear_contours_xld(联合相邻或相同 角度直线)select_contours_xld(提取想要的轮廓) union_cocircular_contours_xld(联合相同圆) 等等 得到轮廓后如果你不知道怎么处理后得到你想要的东西(线、弧、圆、角、矩形)你都可以将轮廓转化 为点,然后用点集合来拟合任何你想要的东西。 二、BLOB分析检测(前面一篇有详细讲解,本骗只讲思路) (1)应用ROI,可以使Blob分析加速。 (2)匹配ROI区域或图像

python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别

青春壹個敷衍的年華 提交于 2019-12-05 09:57:34
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别 更新时间:2018年06月04日 11:04:53 作者:Hi!Roy! 我要评论 这篇文章主要给大家介绍了关于python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧 前言 写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线、变形、重叠、不同字体颜色等方法来增加识别难度。 相应的,验证码识别大体可以分为下面几个步骤: 灰度处理 增加对比度(可选) 二值化 降噪 倾斜校正分割字符 建立训练库 识别 由于是实验性质的,文中用到的验证码均为程序生成而不是批量下载真实的网站验证码,这样做的好处就是可以有大量的知道明确结果的数据集。 当需要真实环境下需要获取数据时,可以使用结合各个大码平台来建立数据集进行训练。 生成验证码这里我使用 Claptcha ( 本地下载 )这个库,当然 Captcha ( 本地下载 )这个库也是个不错的选择。 为了生成最简单的纯数字、无干扰的验证码,首先需要将claptcha.py的285行_drawLine做一些修改

python验证码处理(1)

自古美人都是妖i 提交于 2019-12-04 02:16:07
目录 一.普通图形验证码   这篇博客及之后的系列,我会向大家介绍各种验证码的识别。包括普通图形验证码,极验滑动验证码,点触验证码,微博宫格验证码。 一.普通图形验证码   之前的博客已向大家介绍了简单的图形验证码的处理过程,但是会和实际的有所差别,这是因为验证码内的多余线条与图案干扰了图片的识别。因此,对于这种情况,需要我们进行一些处理,然后才能识别出正确的结果,下面是进行处理的方法。 1.灰度处理   可以用Image对象的convert()方法传入参数L,就可以把图片转化为灰度图像,如下代码: img = Image.open('1.jpg') image = img.convert('L') image.show() 结果为: 2.二值化处理   可以传入1进行二值化处理,如下代码: img = Image.open('1.jpg') image = img.convert('1') image.show() 结果为:   还可以指定二值化的阈值,默认的阈值是127,要指定的话必须要先转化为灰度图像,再指定二值化的阈值。代码如下: image = Image.open('1.jpg') # 先转化为灰度图片 image = image.convert('L') threshold = 180 # 设置阈值 my = [] for i in range(256): if i

OpenCV论道:为什么我的伽马校正函数只有一行?

邮差的信 提交于 2019-12-03 19:26:11
最近在用 OpenCV 识别棋盘棋子,基本的思路是这样的:先转灰度,再做高斯模糊和二值化,此时棋盘格上有的有棋子,有的无棋子;通过迭代腐蚀,消去棋子,再迭代膨胀回来,就得到了一个纯净的棋盘;识别棋盘,标定位置,对原图做透视变换、仿射变换,得到矩形棋盘;利用霍夫圆形检测或轮廓检测取得棋子;借助于机器学习识别棋子,最终得到对弈局面。 实践中发现,光线的强弱、方向对于识别率影响很大,因此打算再增加高光消除、阴影补偿两项。高光消除尝试了很多算法,效果都不是很理想,倒是阴影补偿,使用伽马校正很轻松就搞定了。什么是伽马校正呢?就是提升图像的暗部细节。这与加曝处理是不一样的,加曝一般不区分图像的暗部和亮部。 奇怪的是,我在网上搜到的伽马校正函数看起来都很复杂,即便是 python 写的,也都得十几行甚至几十行,可我写的伽马校正函数只有一行。为什么会这样呢?是我理解的不对吗?欢迎各位大佬就伽马校正问题留言讨论。 import cv2 import numpy as np def gamma_adjust ( im , gamma = 1.0 ) : """伽马矫正""" return ( np . power ( im . astype ( np . float32 ) / 255 , 1 / gamma ) * 255 ) . astype ( np . uint8 ) 下图是原始灰度棋盘

OpenCV---超大图像二值化和空白区域过滤

匿名 (未验证) 提交于 2019-12-03 00:40:02
超大图像的二值化方法 1.可以采用分块方法, 2.先缩放处理就行二值化,然后还原大小 一:分块处理超大图像的二值化问题 def big_image_binary(image): print(image.shape) #( 4208 , 2368 , 3 )   #超大图像,屏幕无法显示完整 cw,ch = 256 , 256 h,w = image.shape[: 2 ] gray = cv.cvtColor(image,cv.COLOR_RGB2GRAY) #要二值化图像,要先进行灰度化处理 for row in range( 0 ,h,ch): for col in range( 0 ,w,cw): roi = gray[row:row+ch,col:col+ cw] #获取分块 # ret,binary = cv.threshold(roi, 0 , 255 ,cv.THRESH_BINARY| cv.THRESH_OTSU)  #全局阈值 binary = cv.adaptiveThreshold(roi, 255 ,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY, 127 , 20 )  #局部阈值 gray[row:row + ch, col:col + cw] = binary   #分块覆盖 print(np.std

基于opencv的Bernsen二值化算法

匿名 (未验证) 提交于 2019-12-03 00:18:01
Bernsen算法是比较出名的二值化算法,网上很多Bernsen代码是基于Matlab的,本人觉得其速度比较慢,所以便基于OpenCV改写了其算法,具体参考的博客链接已经忘记了,希望博主原谅。如果缺少某些函数,比如最大值最小值函数,可以参考 本人其他博客 ,里面会提供。废话不多说,直接上代码: /** @brief 得到矩阵中的最大值与最小值 @param m 单通道CV_8UC1类型矩阵 @param maxValue 最大值 @param minValue 最小值 */ static void GetMatMaxMin( const cv::Mat& m, int & maxValue, int & minValue) { CV_Assert(m.type() == CV_8UC1); maxValue = INT_MIN; minValue = INT_MAX; for ( int y = 0 ; y < m.rows; ++y) { for ( int x = 0 ; x < m.cols; ++x) { int v = m.at<uchar>(y, x); if (v > maxValue) maxValue = v; if (v < minValue) minValue = v; } } } void AutoThresholder::Bernsen( const cv

基于opencv的Bernsen二值化算法

匿名 (未验证) 提交于 2019-12-03 00:18:01
Bernsen算法是比较出名的二值化算法,网上很多Bernsen代码是基于Matlab的,本人觉得其速度比较慢,所以便基于OpenCV改写了其算法,具体参考的博客链接已经忘记了,希望博主原谅。如果缺少某些函数,比如最大值最小值函数,可以参考 本人其他博客 ,里面会提供。废话不多说,直接上代码: /** @brief 得到矩阵中的最大值与最小值 @param m 单通道CV_8UC1类型矩阵 @param maxValue 最大值 @param minValue 最小值 */ static void GetMatMaxMin ( const cv :: Mat & m , int & maxValue , int & minValue ) { CV_Assert ( m . type () == CV_8UC1 ); maxValue = INT_MIN ; minValue = INT_MAX ; for ( int y = 0 ; y < m . rows ; ++ y ) { for ( int x = 0 ; x < m . cols ; ++ x ) { int v = m . at <uchar> ( y , x ); if ( v > maxValue ) maxValue = v ; if ( v < minValue ) minValue = v ; } } }