`
sogotobj
  • 浏览: 639188 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Delphi图像处理 -- Photoshop图像亮度/对比度调整

阅读更多

本人已经写过几篇关于亮度调整的文章,但是关于图像的对比度调整的过程和文章却一直没有写,其原因是一直没找到一个好的算法。可能有人会说,图像的亮度,对比度调整是最简单的图形操作,其算法网上可说是一搜一大把,确实如此,可就是这最简单的操作,网上的文章却五花八门,我拣几个试了一下,好像都不太理想,关键是算法太简单,实际操作效果不好,于是想,Photoshop的对比度还是较好的,而且也通用,但偏偏网上没有介绍它的算法,用了大半天时间研究了一下,再花了1个来小时写了个Delphi过程,试了一下,居然和Photoshop的对比度调整完全一样的效果!于是认真写了个测试程序,把亮度和对比度放在一起进行调整(亮度和对比度处理过程为各自独立的,其中亮度过程基本是本BLOG文章《GDI+ 在Delphi程序的应用 -- 调整图像亮度》的代码),可是效果却和Photoshop大不一样了,是什么原因呢,Photoshop的亮度调整算法是最简单的那种,与我的亮度过程做出来的是一样的(效果比较图参见《GDI+ 在Delphi程序的应用 -- 线性调整图像亮度》),而前面说了,对比度过程算法也是和Photoshop一样的,可放在一起调整就不行了,无论是先调整亮度,还是先调整对比度都这样。后来仔细分析了一下,Photoshop是用一个函数处理亮度/对比度,而且亮度调整是按对比度的正负分别对待的,下面是实现代码:

下面对亮度/对比度的原理简单介绍一下。

一、Photoshop对比度算法。可以用下面的公式来表示:

(1)、nRGB = RGB + (RGB - Threshold) * Contrast / 255

公式中,nRGB表示图像像素新的R、G、B分量,RGB表示图像像素R、G、B分量,Threshold为给定的阀值,Contrast为处理过的对比度增量。

Photoshop对于对比度增量,是按给定值的正负分别处理的:

当增量等于-255时,是图像对比度的下端极限,此时,图像RGB各分量都等于阀值,图像呈全灰色,灰度图上只有1条线,即阀值灰度;

当增量大于-255且小于0时,直接用上面的公式计算图像像素各分量;

当增量等于 255时,是图像对比度的上端极限,实际等于设置图像阀值,图像由最多八种颜色组成,灰度图上最多8条线,即红、黄、绿、青、蓝、紫及黑与白;

当增量大于0且小于255时,则先按下面公式(2)处理增量,然后再按上面公式(1)计算对比度:

(2)、nContrast = 255 * 255 / (255 - Contrast) - 255

公式中的nContrast为处理后的对比度增量,Contrast为给定的对比度增量。

二、图像亮度调整。本文采用的是最常用的非线性亮度调整(Phoposhop CS3以下版本也是这种亮度调整方式,CS3及以上版本也保留了该亮度调整方式的选项),本文亮度调整采用MMX,对亮度增量分正负情况分别进行了处理,每次处理2个像素,速度相当快,比常规BASM代码的亮度处理过程还要快几倍(参见《GDI+ 在Delphi程序的应用 -- 调整图像亮度》)。

三、图像亮度/对比度综合调整算法。这个很简单,当亮度、对比度同时调整时,如果对比度大于0,现调整亮度,再调整对比度;当对比度小于0时,则相反,先调整对比度,再调整亮度。

下面给出完整的调整亮度/对比度的Delphi代码,包括灰度统计、绘图等:

例子代码中的图像显示过程DrawImage见《Delphi图像处理 -- 图像显示》,灰度统计过程ImageGrayStat见《Delphi图像处理 -- 图像的灰度化、二值化及反色》。

例子中有个线性亮度选项,有关线性亮度/对比度调整另文介绍。

下面是运行界面,其效果和Photoshop基本一致(如果前面实现代码不优化速度,由256替代255,与Photoshop应该是完全相同的):

文章中使用GDI+版本下载地址和说明见《GDI+ for VCL基础 -- GDI+ 与 VCL》。

文章中所用数据类型及一些过程见《Delphi图像处理 -- 数据类型及内部过程》和《Delphi图像处理 -- 图像像素结构与图像数据转换》。

尽管我十分努力,但水平有限,错误在所难免,欢迎指正和指导。邮箱地址:

maozefa@hotmail.com

本文代码于2010.5.20重新修订过。增加了拷贝形式的调整过程和响应回调函数的调整过程(修改过的例子代码使用了这种处理过程)。代码中的ExecuteAbort过程和ExecuteProc过程见《Delphi图像处理 -- 图像像素结构与图像数据转换》。

分享到:
评论

相关推荐

    delphi图像 对比度.rar

    在本资源中,我们主要探讨的是使用Delphi7进行图像处理,特别是调整图像对比度的实践。Delphi7是一款强大的Windows应用程序开发工具,它提供了丰富的组件库和编程接口,使得开发者能够轻松地创建图形用户界面并实现...

    delphi图像处理源程序

    同时,可以使用像素操作来改变图像的亮度、对比度、饱和度等。 4. **图像滤镜**:Delphi可以通过像素级别的操作实现各种滤镜效果,如模糊、锐化、边缘检测等。例如,可以遍历图像的每个像素,根据特定算法改变其RGB...

    数字图像处理----空间滤波----非线性滤波----梯度边缘增强----Delphi源代码

    在本文中,我们将深入探讨与"数字图像处理"相关的主题,特别是关注"空间滤波"、"非线性滤波"、"梯度边缘增强"这些技术,并结合使用Delphi编程语言实现源代码的角度来讨论。这些技术在图像分析、计算机视觉以及图像...

    Delphi数字图像处理及高级应用

    《Delphi数字图像处理及高级应用》是一本深入探讨如何使用Delphi进行高效、精确的数字图像处理技术的书籍。Delphi,作为一个强大的面向对象的编程环境,因其高效的执行速度和丰富的库支持,成为了开发图像处理软件的...

    Delphi图像处理单元

    **Delphi图像处理单元**是基于Delphi编程环境中用于图像操作和处理的组件或库。这个单元集成了GDI+(Graphics Device Interface Plus)技术,提供了丰富的图像处理功能,包括但不限于图像加载、显示、保存、裁剪、...

    Delphi-OpenCV-master.zip

    《Delphi与OpenCV的深度整合:探索与实践》 在计算机视觉领域,OpenCV(开源计算机视觉库)是一个...通过深入研究这个项目,不仅可以掌握OpenCV在Delphi中的应用技巧,还能提升在图像处理和计算机视觉领域的专业技能。

    Delphi-OpenCV-master

    Delphi-OpenCV (master) OpenCV version - 2.4.6 Development environment - Delphi XE2-XE4 Contributors: Laentir Valetov email:laex@bk.ru Mikhail Grigorev email: sleuthhound@gmail.com How to install: ...

    Delphi-OpenCV-master delphi2010-XE8可用的OpenCV组件

    对于初学者来说,这个过程可能会有些复杂,但一旦完成,就能在Delphi环境中直接调用OpenCV的API函数,进行图像处理和视觉识别任务。 OpenCV的主要功能包括图像读取、显示、处理、特征检测、对象识别、人脸识别等。...

    delphi-modbus-tcp-indy.7z

    Delphi是一种强大的面向对象的编程语言,常用于开发桌面应用程序,而Modbus TCP是一种工业通信协议,用于设备间的网络通信,特别是PLC(可编程逻辑控制器)和其他自动化设备。这个"delphi-modbus-tcp-indy.7z"压缩包...

    delphi-modbus-tcp三方控件,支持Delphi11

    标题中的"delphi-modbus-tcp三方控件,支持Delphi11"表明这是一个专为Delphi编程环境设计的第三方Modbus TCP库,用于在Delphi 11应用程序中实现Modbus通信。Modbus是一种广泛使用的工业通信协议,主要用于设备间的...

    DELPHI数字图像处理 源码

    3. **图像增强**:图像增强包括对比度调整、亮度调整、锐化等,目的是改善图像视觉效果。Delphi中的TBitmap对象提供了位图操作的方法,如SetPixel、GetPixel等,可以用来实现这些功能。 4. **图像变换**:图像变换...

    delphi 图像亮度处理

    这只是一个基础操作,Delphi还提供了丰富的图像处理功能,如对比度调整、色彩空间转换等,可以满足更多复杂的图像处理需求。如果你需要处理大量图像或者开发图像处理软件,了解并熟练掌握这些技术是非常重要的。

    Delphi数字图像处理及高级应用 -- 源码

    图像增强则包括对比度调整、亮度修正、直方图均衡化等,以改善视觉效果。 6. **色彩空间转换** 不同色彩空间有不同的用途,如RGB适合显示器显示,CMYK用于印刷。Delphi中可以实现色彩空间之间的转换,如RGB到灰度...

    DELPHI图像处理及高级应用 && 源码

    6. 图像分析:像素级的统计分析,如直方图、对比度、亮度调整。 7. 高级应用:可能包括图像识别、模板匹配、图像分割、特征提取等复杂算法的实现。 源码部分,"源码]DELPHI数字图像处理及高级应用.zip"很可能是与书...

    Delphi图像处理方法

    本篇文章将深入探讨Delphi中实现图像处理的一些核心方法,包括直方图拉伸、亮度和对比度调整、图像旋转以及二值化。 首先,直方图拉伸是一种改善图像视觉效果的技术,它通过改变像素的灰度级分布来扩大图像的动态...

    delphi数字图像处理及高级应用书籍及随书源码.zip

    《Delphi数字图像处理及高级应用》是一本深入探讨如何在Delphi环境下进行图像处理和高级应用的专业书籍。这本书不仅提供了理论知识,还包含了丰富的实际操作案例和完整的源代码,对于那些想要在图像处理领域深化技能...

    delphi图像处理

    这对于调整图像色彩、亮度和对比度等非常有用。 4. **图像分析**: Delphi的图像处理不仅限于视觉效果,还可以用于图像分析,比如识别、分割和特征提取。这需要利用到图像处理算法,如直方图均衡化、阈值分割、...

    Delphi数字图像处理及高级应用 PDF

    图像增强则是通过调整图像的对比度、亮度、锐化程度等参数,使图像更加清晰、易于观察。Delphi通过其内置的图像处理组件,能够轻松实现这些功能,提升图像视觉效果。 #### 3. **图像识别与分析** 图像识别是指从...

    Photoshop SDK for Delphi6,7

    通过这个SDK,开发者可以创建具有专业级图像处理能力的应用程序,包括调整颜色、亮度、对比度,应用复杂的滤镜效果,以及进行高级图像合成。 2. **Delphi集成开发环境**:Delphi是Borland公司(现为Embarcadero ...

    Delphi图像处理小程序

    2. **颜色处理**:图像的颜色可以通过调整亮度、对比度、饱和度来改变。Delphi中可以利用GDI+库或者第三方库如FreeImage,对像素级别的颜色进行修改,实现图像色彩的调整。 3. **滤镜效果**:包括模糊、锐化、浮雕...

Global site tag (gtag.js) - Google Analytics