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

Delphi图像处理 -- 填充浮雕效果

阅读更多

这个填充浮雕效果过程代码已经完成好几天了,但是一直没敢在BLOG上发表,因为这是我在研究Photoshop浮雕效果做实验时,无意中写的一段代码,当时就感觉这个效果虽然不是我想要的Photoshop浮雕效果,但比Photoshop浮雕效果的应用价值应该不会差,可以说是各有特色。只是当时感觉处理速度较慢,同时顾虑该浮雕效果是我妙想天开,发表后会不会有引起嘲笑。经过了几天的改进和原理论证,我觉得该浮雕效果从原理上是说得通的,而改进后的速度一般情况下比彩色浮雕处理快,在浮雕深度较小(< 8)的时候,比灰色浮雕处理还快,所以还是决定发表在这里,供大家讨论其实用性,或给出改进意见。至于这种浮雕效果的名称,刚开始时因其效果类似石雕,准备取名石雕效果,经改进后,可用任何颜色或者图案进行填充浮雕画面,所以取名填充浮雕效果。

下面先给出浮雕过程处理代码

代码中所用到的变量BilinearTable见《Delphi图像处理 -- 图像像素结构与图像数据转换》,ImageGray过程在《Delphi图像处理 -- 图像的灰度化、二值化及反色》。

从处理流程看,填充浮雕和彩色浮雕、灰色浮雕是一样的,但在像素处理上是不相同的。下面是用一个用45度角,2像素深度浮雕差值计算矩阵图来说明几种浮雕效果像素处理的差异

各矩阵中,中间的点可以看作为要处理的像素。

灰度浮雕固定地取左上角点和右下角的差值加上128背景值 (无论深度多大,都是如此,只是矩阵中间的0多少的问题),如此一来,差异小的像素趋向于背景色,差异大的像素形成“黑白分明”的阴线和阳线,这就成了灰色的浮雕效果,浮雕深度越大,“黑白分明”的效果就越明显,当深度达到一个比较大的值时,画面上会形成加强了的正、负片以及图像原色彩3层画面的共存状态;

彩色浮雕也是固定的取邻近3个点的值减去2倍右下角点的值,由于被减的点数大于减的点数,在雕刻阴影形成时保留了很大的亮度,这就相当于给各像素加了一个不固定的背景值,所以形成彩色浮雕效果;

而填充浮雕的则是取主对角线除右下角外的各点之和的平均值,减去右下角点的值,再加上填充背景色,在背景色固定的前提下(假定128),会形成类似灰度浮雕的效果,但是由于是取主对角线除右下角外的各点之和的平均值,就相当于先对像素点做了一定的表面模糊后再减去右下角点的值,所以,当雕刻深度增大时,不会形成明显的“黑白分明”效应,而是有一定的模糊过渡带,即类似阴影的半影调。

下面是以45度角,深度为10,背景色128的灰度浮雕和填充浮雕效果比较图:

左上角是原图,左下角是灰度浮雕效果图,右上角是填充浮雕效果图,因为填充浮雕在浮雕效果处理前对原图作了灰度处理,为便于比较,所以右下角是灰度化后的灰色浮雕效果图。

从比较图上可以看出,当浮雕深度较大时,无论是否去色,灰度浮雕效果的阳线带和阴线带都很明显,而填充浮雕则存在过渡半影调,所以,看起来有石雕的效果。另外,从灰色背景上看,填充浮雕效果明显的平坦于灰色浮雕效果,这是因为填充浮雕处理有一定的表面模糊作用的缘故。

填充浮雕可以以任意颜色和图案作为背景填充,这就使得填充浮雕过程能产生各种效果的浮雕图,为了便于使用,我把填充浮雕过程写成了2个过程,分别用来处理实色填充和图案填充。对于图案填充所用的图片大小,最好是2的幂次方,因为为了避免作除法运算,加快处理过程,代码对填充图片大小作了2的幂次方处理,这样一来,有可能破坏填充图案的衔接。

下面先对实色填充作几个图片处理测试:

测试代码(仿玉石浮雕效果)

例子中的DrawImage过程见《Delphi图像处理 -- 图像显示》。

效果图如下,上面是原图,下面左边是45度,深度为5的浮雕效果,下面右边是45度,深度为10的浮雕效果。

原图:

你是否觉得象玉石浮雕?特别是右边图中那些重叠着的叶片, 真有着一种晶莹剔透的感觉!

下面是以角度30,深度8,填充颜色为$A5140A的仿玛瑙色浮雕效果图,测试代码就不贴了:

下面是使用4种不同填充图案调用ImageTextureSculpture过程分别形成的浮雕效果图(原图在文章前面),角度50,浮雕深度从左上角开始,依次是8657

通过几天的研究和测试,发现浮雕角度、深度和填充色(图案)的选择,应根据图片的实际情况确定,如上图中,左上角的填充图案颜色较深、较杂,这就需要把浮雕深度用大一点,反之,如左下角就要相应小一点;图像较平淡的,不宜用很深的浮雕;浮雕角度与图像光照方向基本对应;填充颜色(图案)也应按图像具体选用,如前面的玉雕效果图,如果换成其它图片,效果不一定那么好,反过来也可以说,那张图用玛瑙色效果就差多了。

关于填充效果图的介绍就到此为止,欢迎朋友们提出改进意见。

最后重申一下,该效果确是本人无意中搞出来的,如果已经有类似的方法,纯属巧合,本人不和你争“专利权”了。

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

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

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

maozefa@hotmail.com

注:本文章与2009.10.30重新整理。

分享到:
评论

相关推荐

    delphi-modbus-develop.zip_delphi_delphi-modbus-1.6.7_modbus_modb

    最新版 delphi-modbus-develop 1.6.7

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

    本文将重点讨论如何在Delphi集成环境中利用OpenCV进行开发,以及一个特别针对Delphi 2010到XE8优化的OpenCV组件——"Delphi-OpenCV-master"。 首先,"Delphi-OpenCV-master"是专为Delphi 2010至XE8版本设计的OpenCV...

    Delphi-OpenCV-Class-main

    Delphi binding for OpenCV Experimental Delphi binding for OpenCV 4.7.0 Development environment - Delphi 10.4, 11 x64 platform only

    ffmpeg-delphi-pascal-headers-3.0.2.zip_FFVCL_delphi vlc_ffmpeg_f

    "ffmpeg-delphi-pascal-headers-3.0.2.zip" 是一个针对 Delphi 用户的 FFmpeg 头文件包,包含了 FFmpeg 3.0.2 版本的 Pascal 头文件,适用于 Delphi 的 FFVCL 库。 FFVCL (FFmpeg Video Component Library) 是一个 ...

    Delphi xe4 实现图像类似浮雕效果的函数改进后可以处理多种格式图片

    在本文中,我们将深入探讨如何在Delphi XE4中实现图像处理,特别是创建类似浮雕效果的功能。原函数仅支持.bmp格式的图像,但经过改进后,它能够处理多种图像格式,为开发者提供了更大的灵活性。 首先,让我们理解...

    一个非常精彩的图像旋转控件(delphi)

    在Delphi编程环境中,开发一款图像旋转控件是一项常见的任务,尤其对于那些涉及到图像处理的软件。本控件,名为“rotateimage.v1.4”,显然专注于提供图像旋转功能,使得用户可以方便地对图像进行角度调整。这个控件...

    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-modbus-tcp-indy.7z

    这个"delphi-modbus-tcp-indy.7z"压缩包包含的是用Delphi编写的Modbus TCP组件,它基于两个不同的Indy版本——Indy 9和Indy 10。 Indy(Internet Direct)是Delphi和C++Builder中的一套网络库,提供了一组跨平台的...

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

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

    Delphi-OpenCV-master.zip

    "Delphi-OpenCV-master.zip"这个压缩包,正是将OpenCV库与Delphi开发环境紧密结合的一个项目实例。 首先,我们来理解一下Delphi中的OpenCV集成。OpenCV本身是用C++编写的,但通过Pascal封装,可以在Delphi中无缝...

    Delphi-OpenCV-master 2.4.13

    本项目“Delphi-OpenCV-master 2.4.13”是将OpenCV库与Delphi集成的实践案例,适用于Delphi 2010到10.3的开发环境。Delphi是一款强大的面向对象的 Pascal 编程工具,常用于桌面应用开发,与OpenCV的结合使得开发者...

    Delphi26Binaries-2019.27-windows.pak

    Delphi26Binaries-2019.27-.pak

    delphi图像处理源程序

    8. **执行文件(exe)**:提供的可执行文件可能是对源代码的编译结果,可以直接运行以查看图像处理效果,这对于验证源代码的正确性或快速测试非常有用。 毕业设计和演示文稿部分可能包含关于如何将上述知识点整合到...

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

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

    Kassl-dOPC4Delphi-Trial-Setup.exe

    Kassl-dOPC4Delphi-Trial-Setup.exe

    Delphi-Cross-Socket-master.zip

    "Delphi-Cross-Socket-master"中的项目可能包含了完整的客户端和服务端示例,通过查看源代码,我们可以学习如何配置Socket组件,如何编写事件处理代码,以及如何进行跨平台调试和测试。 总的来说,"Delphi-Cross-...

    Delphi图像处理单元

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

    Delphi-OpenCV-master.zip_Delphi OpenCV_delphi open cv_open_openc

    OPEN CV LIBRARY for DELPHI

    Delphi【HMC-SHA签名、SHA加密、MD5加密、URL编码与解码、Base64编码与解码】

    Delphi提供了一系列的函数,如UrlEncode和UrlDecode,来处理这些情况。例如,空格通常被编码为"%20",而其他非ASCII字符也会转换为百分号加上它们的十六进制表示。 Base64是一种用于将二进制数据编码为ASCII字符的...

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

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

Global site tag (gtag.js) - Google Analytics