对数函数图像增强

上一篇我们说到的图像线性增强是对于黑白图片整体像素值局限于某一区间的情况进行线性增强。但是有时候的图片显示效果不好并不是这个原因,而是一张图片中的大部分像素值都偏高或偏低,这样的图片整体看起来偏亮或偏暗,这时候利用线性增强所取得的效果或许并不好,甚至于无效(因为一张图片尽管整体偏暗,但是它的最大像素值能达到255,最小像素值能达到0),因此我们需要利用其它方法来进行色彩均衡。这里我们介绍一下利用log函数和幂函数的方法来均衡图像色彩。

首先我们写一个log函数表达式:Y=logaX。这里我们再结合一下log函数图像来直观的感受一下自变量X和因变量Y的关系。函数图像如下:
从该函数图像中我们可以得到以下几点信息:
1、 自变量变化△X时,设因变量变化△Y,其中△Y<△X;
2、 当底数a>1时,log函数为单调递增函数;
3、 当自变量X<1时,因变量Y为负数。
根据以上函数特征,我们知道利用log函数,可以根据底数a的不同,将X作为输入的像素值,Y作为目的像素值,对一张图像的低灰度进行不同程度的拉伸,对于一张图像的高灰度部分进行不同程度的压缩,但是结合图像特征,我们在编写程序时应当注意以下几点:
1、 因为当X的取值达到很大时,Y的值可能仍然很小,所以我们应当添加一个常数C,将log函数公式稍加变形为:Y=ClogaX;
2、 添加的常数C应当有一个原则,即当我们输入的X为输入图像中最大的像素值时,应当能够保证log函数运算后输出的像素值为255,因此我们的C=255/logaFMAX(其中FMAX为当前输入图像的最大像素值);
3、 因为当log函数中的自变量小于1时,函数结果为负,为了防止这种情况出现,我们应当设定X=输入图像的像素值+1;
以上,图像log增强的原理已经讲解完毕,下面是代码实现过程,为了代码简洁性,因此我在代码中直接设定了log的底数a为2(实际上可根据不同情况自行设定,但是需要满足条件a>1)。


```java
public static BufferedImage image_Log(BufferedImage leftImage){int width = leftImage.getWidth();int height = leftImage.getHeight();int srcRGBs[] = leftImage.getRGB(0, 0, width, height, null, 0, width);int rgb[]=new int[3];BufferedImage destImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);int fmin=0,fmax=0;for (int j = 0; j < height; j++) {for(int i=0; i<width; i++) {ImageUtil.decodeColor(srcRGBs[j*width+i],rgb);if(j==0&&i==0){fmin=rgb[1];fmax=rgb[2];}if (rgb[1]<fmin){fmin=rgb[1];}if (rgb[1]>fmax){fmax=rgb[1];}}}for (int j=0;j<height;j++) {for (int i = 0; i < width; i++) {ImageUtil.decodeColor(srcRGBs[j * width + i], rgb);rgb[0]=(int)(((255.0/Math.log(1+fmax))*Math.log(1+rgb[0])));//这里之所以这么乘,是为了保证最大值(不到255)能到达255rgb[1]=(int)(((255.0/Math.log(1+fmax))*Math.log(1+rgb[1])));rgb[2]=(int)(((255.0/Math.log(1+fmax))*Math.log(1+rgb[2])));destImage.setRGB(i,j, ImageUtil.encodeColor(rgb));}}return destImage;}

``

下面是实现效果图:
以上就是利用对数函数实现图像增强的具体实现,但是你用对数函数仍然有一定的局限性,如它的作用所提,它对于过亮的图像无法进行增强。因此,下篇我将介绍更为强大的伽马变换进行图像增强,他可以对于过亮或过暗的图像进行调节。

总代码包下载:https://download.csdn.net/download/yiyexy/12323645

Java实现对数函数图像增强相关推荐

  1. 【Java】快速傅里叶变换FFT的程序实现(时间抽取的基-2FFT、倒位计算、蝶形运算)

    Java--快速傅里叶变换(FFT)的程序实现 好久没来更新了,阿汪大三了. 这学期阿汪要学习两门课<数字信号处理>和<Java程序设计>,刚好前几天老师告诉我们不久后会有个实 ...

  2. java中怎么调用对数函数_Java对数函数及其运算方法

    Java对数函数的计算方法非常有问题,然而在API中却有惊人的误差.但是假如运用了以下的方法,用Java处理数字所碰到的小麻烦就可以轻而易举的解决了. Sun的J2SE提供了一个单一的Java对数方法 ...

  3. 对数 java_Java对数函数及Java对数运算

    Java对数函数的计算方法非常有问题,然而在API中却有惊人的误差.但是假如运用了以下的方法,用Java处理数字所碰到的小麻烦就可以轻而易举的解决了. Sun的J2SE提供了一个单一的Java对数方法 ...

  4. java图像增强_java图片对比度调整示例代码

    前言 本文主要给大家介绍了关于java图片对比度调整的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法如下 测试代码 public static void main(Stri ...

  5. Java实现图像增强之伽马变换

    图像增强之伽马变换 接着上篇,我们再来说说伽马变换进行图像增强,实际上伽马变换利用的正式幂函数的特征,对输入的过暗或过亮的图像进行想要的变换.因此只有先了解幂函数,我们才能理解伽马变换的本质.照例我们 ...

  6. java图像增强_图像增强之空间域滤波

    1.为什么进行图像增强 图像增强是指增强图像中某些特征,同时削弱或去除某些不需要的信息,即为了某种应用而去改善图像的质量,消除噪声,显现那些被模糊了的细节或简单的突出一副图像中感兴趣的特征.所以图像增 ...

  7. 数字图像处理7:图像增强之灰度变换

    图像处理入门:图像增强之灰度变换 2018年10月28日 15:48:13 M_Z_G_Y 阅读数:42 改善降质图像的方法:1.图像增强:2.图像复原 其中图像增强的主要内容如下: 灰度变换也被称为 ...

  8. 数字图像处理——第三章 空间域图像增强(灰度变换和直方图处理)

    文章目录 空间域图像增强 1. 背景知识 2. 基本灰度变换 2.1 图像反转 2.2 对数变换 2.3 幂次变换 2.4 分段线性变换函数 2.4.1 对比拉伸 2.4.2 灰度切割 2.4.3 位 ...

  9. OpenCV图像增强(二)——Retinex图像增强

    前言 1.Retinex图像增强是一种高动态范围图像的新色调映射技术.而基础理论是,物体的颜色是由物体对长波(红色).中波(绿色).短波(蓝色)光线的反射能力来决定的,而不是由反射光强度的绝对值来决定 ...

  10. 期末Java面向对象程序设计复习稳过不挂指南(更新中)

    目录 第三章.java类基础知识 第四节.自定义函数 ·同一个类中,函数名称可以相同,即重载函数(overload),但函数参数的个数或者类型必须不同 第四章.面向对象和类 第一节.面向对象思想 ·对 ...

最新文章

  1. 【计算理论】下推自动机 PDA 及 计算示例
  2. 不错的博 2010-02-07
  3. mysql数学函数名_Mysql数学函数
  4. 谈谈对python的理解_浅谈对python pandas中 inplace 参数的理解
  5. java连接imserver_java后端IM消息推送服务开发——协议
  6. C语言(CED)输入一个任意长度的正整数,将该数逆序输出。
  7. 在平常网上原来是这样购票的(模拟购票)
  8. 【刷题】LOJ 6005 「网络流 24 题」最长递增子序列
  9. 分享一款在线less转css的神器
  10. MySQL 索引失效案例
  11. HDU-1042 N!
  12. Abaqus运行fortan报错:“Error in job Job-1: Problem during compilation - D:\test.for”
  13. windows 10 账号密码策略及规则
  14. 计算机操作系统-操作系统的定义
  15. 037 《思考,快与慢》听后感
  16. 用友系统中连接数据库服务器失败,用友u8服务器连接不到本地数据库
  17. 数据库服务器如何备份详细教程!
  18. linux切换ip地址脚本,批处理实现的ip地址切换的复杂脚本
  19. 【论文笔记】ERNIE-VIL: KNOWLEDGE ENHANCED VISION-LANGUAGE REPRESENTATIONS THROUGH SCENE GRAPH
  20. 声音断续、卡顿问题分析

热门文章

  1. ior - POSIX文件系统测试工具
  2. python判断excel某单元格是否为空
  3. 微信支付-JASPI:准备工作[微信公众平台配置,微信商户平台配置]
  4. 最近十年诞生的6种新编程语言
  5. 【Android Studio】简单的QQ登录界面
  6. SG平滑轨迹算法的原理和实现
  7. Zotero+坚果云的文献二三事
  8. 软考数据库-无损联接分解
  9. 塔米狗上的达人名片有什么作用?
  10. 计算机键盘中英文,电脑键盘指法练习(英文+数字)