图像处理:灰度图片线性截断拉伸

这篇具有很好参考价值的文章主要介绍了图像处理:灰度图片线性截断拉伸。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 为什么要拉伸

       很多时候,灰度图片的灰度级较大,而像素值的分布比较集中,这就导致灰度级的利用率过低,从而导致图片的对比度很小,人眼的感官体验很不好,因此我们通常需要对原始的图像数据进行拉伸调整,增加图片的对比度以适应人眼观察。当前很多红外摄像机拍摄的图像为灰度图,通常使用8、14或者16个比特位取保存一个像素值,那么其灰度级分别为255、16383、65535,灰度级表示了像素值的取值范围,其值越大,可表达的细节越细腻。通常情况下,相机拍摄的灰度图片,其实际的像素取值范围,并不会均匀地分布在灰度级范围之内,而是集中在一小段范围内,比如图1所示,一张16位的红外图像,其像素值的取值集中在[12560,13584]范围之内,其灰度级利用率仅为1.6%,图片偏暗,对比度很低,因此完全看不清图片里边的内容。为了可以看清图片的内容,就必须对原始的灰度图片进行灰度拉伸,所谓灰度拉伸就是对图片灰度进行调整,将原始像素值重新映射到灰度级范围之内,从而改变图片的亮度和对比度。

图像处理:灰度图片线性截断拉伸

图1 16位灰度图像以及其像素值分布

2. 灰度图像线性拉伸

       如上文所说的那样,如果灰度图像的像素值分布在较小的范围,而灰度级又比较大,灰度级的利用率太低,势必会造成图像的对比度的严重下降。为了增加图像的对比度,就要想办法对像素值的分布进行调整,使得灰度级能得到充分的利用,一个最为简单的方法,就是采用线性拉伸,将小范围的像素分布,映射到整个灰度级范围。假如灰度图像的位深是16位,即期灰度级是65535,像素值范围是[12560,13584],为了调整对比度,可以将像素值重新映射到[0,65535]的范围之内。线性拉伸的计算公式如下所示:

I M G d s t = I M G s r c − M I N M A X − M I N × M IMG_{dst}=\frac{IMG_{src}-MIN}{MAX-MIN}\times M IMGdst=MAXMINIMGsrcMIN×M

上式中, I M G s r c IMG_{src} IMGsrc表示原始图片像素数据, I M G d s t IMG_{dst} IMGdst是经过线性拉伸后的像素值, M I N MIN MIN表示原始像素数据的最小值, M A X MAX MAX表示原始像素值数据的最大值, M M M表示灰度图像的灰度等级,一般是255、16383、65535,分别对应像素的位深8位、14位、16位。

       以下图2为一幅16位灰度图的,经过线性拉伸前后的视觉效果对比(左边位原始图,右边是经过线性拉伸的图)。通过对比图发现,经过线性拉伸后之后,图像从黑漆漆的一片,变成了可以看得见的图像,且其中的内容层次分明。
图像处理:灰度图片线性截断拉伸

图2 线性拉伸效果

3. 灰度图像线性截断拉伸

       上文示例的图片,使用线性拉伸的算法进行处理,就可以取得良好的视觉效果,但是并非所有的图片都适用,只有那些像素值分布比较集中,且不存在少量像素值偏移均值太多的灰度图,才可以使用线性拉伸处理。如果灰度图像存在坏点,或者存在少数像素值偏离均值很多,导致像素值的分布范围很大,那么采用线性拉伸算法进行处理,视觉效果改善很小。上文提到,图像的对比度很低,是因为像素分布过于集中,灰度级利用率过低导致的。其实还有另一种情况,即使是像素利用率很高,但仍然视觉效果很差。导致这种结果的原因是,存在少量的像素点,其像素值散布很大,而这些少量的像素点,其实是“无效”的。也就是说,这些像素点由于数量很少,它们对于视觉的贡献是很小的,却占用了大量的灰度空间,而大量的像素值还拥挤在狭小的灰度空间内,实际上有效的灰度级利用率还是很小。比如一种比较极端的情况:一张16位的灰度图,其99.9%的像素值分布在[10000,15000]这样小的范围内,而有0.1%的像素是极暗的0值或者极亮的值65535,远远偏离了大部队的位置,如果采用上文通过求最大最小值的方法进行拉伸,最后图像的对比度不会有任何的改善。

       为了改进线性拉伸算法的缺陷,需要对上下偏离中心值很大的像素进行截断。换句话说,这些散布较大的像素值,数量很少,它们对于视觉的贡献是可有可无的,所以把它们截掉之后对视觉的影响可以忽略不记。如图3所示,是一张16位灰度图的像素值分布图(直方图),可以看到大部分像素分布在[a,b]之间,占比99.8%,而少量的点散布在[0,a]和[b,65535]之间,占比0.2%。只要将像素值从a点和b点截断,只将像素区间[a,b]映射到0到65535之间,即可获得很好的对比度提升。
图像处理:灰度图片线性截断拉伸

图3 像素值分布
       截断一些像素值肯定是有利于提高对比度的,那么如何确定截断点在哪里呢?也就是说,如何去确定图3所示的a点和b点?这里提出一种“一刀切”的做法,那就是无论像素值的分布如何,我们总是要让一部分像素值被截断,被截断的像素值所占的百分比是一个可配置的参数,也就说我们可以指定一个往下截断百分比和一个往上截断百分比,比如往下截断0.1%和往下截断0.1%,通过统计被截断像素所占的百分比,确定截断值a和b。假设,图片的总像素数量为num_pixels,灰度等级为M,上下截断的百分比为pcnt,那么确定截断值a和b的具体操作步骤如下:

(1)首先,统计灰度图片的直方图hist,hist为一个一维数组,直方图的数量即数组的长度跟灰度等级一致,如果灰度等级是255,则直方图数量为256,如果灰度等级是65535,则直方图数量为65536;

(2)其次,从下标i=0,1,2,…开始对直方图hist[0:i]进行累计求和得到累计直方图acc_hist,acc_hist=sum(hist[0:i]),当acc_hist/num_pixels>pcnt时,此时的索引值i就是下截止值a;继续对直方图进行累计,当acc_hist/num_pixels>1-pcnt时,此时的i就是上截止值b。

(3)获得上下截止值a和b之后,对原图的像素值进行截断,凡是像素值小于a的都截断为a,凡是像素值大于b的都截断为b。像素值截断之后,开始利用上文提到的线性拉伸方法对图片数据进行拉伸处理,其计算公式为:

I M G c l i p = c l i p ( I M G s r c ) , r a n g e ( a , b ) IMG_{clip}=clip(IMG_{src}), range(a,b) IMGclip=clip(IMGsrc),range(a,b)

I M G d s t = I M G c l i p − a b − a × M IMG_{dst}=\frac{IMG_{clip}-a}{b-a}\times M IMGdst=baIMGclipa×M

       下图4展示的灰度图使用线性拉伸算法以及使用线性截断拉伸算法处理的效果对比图。由此可知,线性截断拉伸算法的适应性更强,可以适应各种类型的灰度图像,特别是图像中存在坏点(盲元)的情况下,线性截断拉伸算法可以很好地剔除异常值,从而实现良好的对比度增强。

       本文所描述的线性截断拉伸算法实现代码如下:

       线性截断拉伸算法python代码

       线性截断拉伸算法matlab代码

图像处理:灰度图片线性截断拉伸

图4 线性拉伸及线性截断拉伸效果对比

4. 总结

       线性拉伸算法对于某些灰度图像,其对比度增强效果良好,但是适应性不强,如果图像中存在坏点或者存在少量像素值散布较大的情况,该方法失效。线性截断拉伸算法是线性拉伸算法的改进,可以克服线性拉伸算法的缺陷,具有剔除异常点的功能,适应性强,能较好地处理各种灰度图像。文章来源地址https://www.toymoban.com/news/detail-456130.html

到了这里,关于图像处理:灰度图片线性截断拉伸的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉学习笔记(图像的灰度与灰度级 图像的深度 图像噪声 图像处理)

    如果把白色和黑色之间按对数关系分为若干等级,称为灰度,灰度分为256阶,0为黑色,灰度就是没有色彩,RGB色彩分量全部相等(150,150,150)就代表灰度为150. 一幅图像中不同位置的亮度是不一样的,可用f(x,y)来表示(x,y)上的亮度。由于光是一种能量形式,因此亮度是非负

    2024年02月01日
    浏览(61)
  • opencv 图像基础处理_灰度图像

    二值图像表示起来简单方便,但是因为其仅有黑白两种颜色,所表示的图像不够细腻。如果想要表现更多的细节,就需要使用更多的颜色。例如,图 2-3 中的 lena 图像是一幅灰度图像, 它采用了更多的数值以体现不同的颜色,因此该图像的细节信息更丰富。 通常,计算机会将

    2024年02月15日
    浏览(57)
  • 图像处理(二值图、灰度图、彩色图像)

    图像处理之二值图像、灰度图像、RGB图像 1、二值图像 定义:二值图像是值仅仅包含黑色和白色的图像 计算机在处理时,会把黑色像素点处理为0,白色像素点处理1。由于只用一个比特位就能表示,所以称之为二值图像。 2、灰度图 为了表达更丰富的颜色细节,灰度图采用更

    2024年02月06日
    浏览(61)
  • 图像预处理算法————灰度化处理

    图像预处理算法适合在FPGA上完成,原理简单且需要快速处理,通常有灰度化、中值、均值滤波等,以及颜色空间转换算法。 灰度图像是一种特殊的彩色图像(R=G=B的彩色图像) 只有一种颜色分量,单通道的0-255 方法:一般有分量法、最大值法、平均值法、加权平均法四种方

    2024年01月17日
    浏览(51)
  • FPGA图像处理-灰度化

    用 verilog 实现彩色图像的灰度化算法,并进行 Modelsim 仿真。 图像处理操作中最简单的一类就是点操作,一个像素的输出只取决于输入图像的相应像素值。 RGB 转 GRAY 公式: GRAY = 0.299R + 0.587G + 0.114B 由于 FPGA 不方便小数运算,所以放大 256 倍进行运算,然后右移 8 位: GRAY = (

    2024年02月07日
    浏览(47)
  • matlab数字图像处理——图像的读写,灰度、二值图像

    一、实验目的 1.结合数字图像处理的知识,直观感受图像处理的基本实现过程 2.熟悉MATLAB工具的使用 3.了解图像的读写和显示 二、实验内容 实验内容一:图像读取 (1)利用编程实现读取图像 利用imread读取文件夹images中的图像;查看读取到的图像数据矩阵,对比灰度图像、

    2024年02月07日
    浏览(58)
  • python 图像处理之图像灰度化 cvtColor

    预备知识 图像灰度化是将一幅彩色图像转换为灰度化图像的过程。 彩色图像的色彩通常由R、G、B三个分量组合而成(其实就是3个二维数组叠加而成),从而搭配出各种颜色 灰度图像中每个像素仅具有一种样本颜色,其灰度是位于黑色与白色之间的多级色彩深度,灰度值大的像素

    2024年02月03日
    浏览(54)
  • Opencv 图像处理:图像基础操作与灰度转化

    本文已收录于Opencv系列专栏: 深入浅出OpenCV ,专栏旨在详解Python版本的Opencv,为计算机视觉的开发与研究打下坚实基础。免费订阅,持续更新。 1.图像格式 图像压缩比: 通过编码器压缩后的图象数字大小和原图象数字大小的压缩比。 BMP 格式 Windows系统下的 标准位图格式 ,

    2024年02月04日
    浏览(51)
  • 图像的灰度处理

    在OpenCV中,灰度处理主要有两种方法:亮度法和加权平均法。   1. 亮度法(Luminosity Method):灰度图像的亮度法是通过对彩色图像的RGB通道进行加权平均来计算灰度值。通常使用以下公式计算每个像素的灰度值, 其中,R、G、B分别表示红色、绿色和蓝色通道的像素值。该方

    2024年02月11日
    浏览(52)
  • 【OpenCV】 基础入门(二)图像基础概念 | 图像灰度化处理 | 图像二值化处理

      在计算机中用一般用 M x N 的矩阵来表示一幅尺寸大小为 M x N 的数字图像,矩阵元素的值就是该图像对应位置上的像素值。    对于计算机本地磁盘中的彩色图像,单机鼠标右键,选择“属性”,可以看到一幅图像的基本信息。 1、灰度图:   灰度图是每个像素只有一

    2024年04月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包