第一篇:图像数据集的预处理
tensorflow1.13项目实战经验分享——OCR工业字符识别(第一篇:图像数据集的预处理)这篇博客及后续的几篇博客是为了记录自己刚刚完成的项目,这个项目是本人在大二时申请的,本人现在大三,当然项目中的很多代码和一些方法基本都是我自己在网络上或者书籍上借鉴的,确实本人还没有这个能力完全掌握这些知识,所以特此说明,如果有用到哪位大神的代码,还请见谅,谢谢。同时本篇博客及后续博客也会分享自己在..
第一篇:图像数据集的预处理
这篇博客及后续的几篇博客是为了记录自己刚刚完成的项目,当然项目中的很多代码和一些方法基本都是我自己在网络上或者书籍上借鉴的,所以特此说明,如果有用到哪位大神的代码,还请见谅,谢谢。
同时本篇博客及后续博客也会分享自己在做项目时自己遇到坑,希望对后来人能够有帮助
图像数据集预处理的目的
图像预处理的主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性和最大限度地简化数据,从而改进特征抽取、图像分割、匹配和识别的可靠性。以上内容来自百度,接下来是我自己的粗浅的见解,我觉得图像数据的预处理,类似于化学中的提纯的操作,只不过这是一种粗糙的提纯,只能够将一些表面的泥沙等杂物去除,为了以后更精确的提纯作准备。
我进行的图像预处理的方法
我在刚刚开始做这个项目时,我的老师给我了整个项目流程图,第一步就是将现有的数据进行图像的预处理,我当时对预处理概念并不是很了解,虽然找到了很多方法,但是我只知道这些方法是进行图像预处理的,但是我并不知道具体的效果,于是我就测试了很多方法,最后我选择了三种方法进行处理我的图像
灰度图转化
首先简单讲述灰度图和RGB图像,灰度图是单通道图像,他没有色彩,RGB三个分量相等,对于灰度图,我们只需要知道灰度图一般分为256级灰度,灰度的像素在0——255之间,0为黑,255为白,其他的0到255是不同的灰度,对于灰度图像数据,我们还要知道,图像的像素是展开来是一个个像素值组成二维数组当然也可以是列表,例如一张10*10大小的灰度图的像素展开来如下图:(为了计算方便像素值已经进行归一化处理,我们采用的归一化处理是将图像的像素值除以255,变成小数)
RGB红、绿、蓝三个颜色通道每种色各分为256阶亮度,在一种颜色为0时表示此种颜色亮度最弱——而在255时此种颜色最亮。当三色灰度数值相同时,产生不同灰度值的灰色调,即三色灰度都为0时,是最暗的黑色调;三色灰度都为255时,是最亮的白色调。
由于要处理RGB的三色图像与处理灰度图像相比,显然要处理的参数更多更复杂,所以我们要将RGB图转化为灰度图,转化的方法很简单我们直接用Image中函数即可:
img = Image.open(img_path)#img_path代表图片的路径
img=img.convert('L')
转化结果如下:
高斯滤波去除高斯噪声
在数字图像中的高斯噪声的主要来源出现在采集期间。 由于不良照明和/或高温引起的传感器噪声,高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。对于高斯噪声和高斯滤波,这里有详解:高斯滤波器详解
在进行高斯滤波是我们只需要使用OpenCV中的cv.GaussianBlur()函数:
使用双峰法进行图像二值化处理
图像直方图
图像直方图是对图像的像素值进行数据统计,灰度图像的直方图中横轴为灰度级(0——256),竖轴为每一个灰度级的像素的个数,这是一张灰度图,它的直方图在下面
如图,下图为上图灰度图像的直方图:
图中的数据显示了图像像素值的分布规律。可以看出上面灰度图中的字符是相对偏向黑色的,在灰度图中对应的x轴坐标50——100这段范围的,其背景对应150以后。
双峰法
在前面的那张灰度图中,我们想要的是图中的字符数据,我不是背景,我们要进行二值化的也是图中的字符,图像的二值化,就是,在灰度图的像素值归为两个类别,一个为像素值0,一个为255,也就是非黑即白,所以我们想要找到一个阈值,将低于这个阈值的像素值设为0,高于这个阈值的像素值设为255,所谓双峰法就是根据灰度图的直方图来选择阈值,比如我们要选择上面灰度图中的字符,就选择100作为阈值,最后的二值化结果如图;
代码我就不往上放了,相对简单,就是对图像的数组的统计。
更多推荐
所有评论(0)