这个填充浮雕效果过程代码已经完成好几天了,但是一直没敢在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,浮雕深度从左上角开始,依次是8,6,5,7:
通过几天的研究和测试,发现浮雕角度、深度和填充色(图案)的选择,应根据图片的实际情况确定,如上图中,左上角的填充图案颜色较深、较杂,这就需要把浮雕深度用大一点,反之,如左下角就要相应小一点;图像较平淡的,不宜用很深的浮雕;浮雕角度与图像光照方向基本对应;填充颜色(图案)也应按图像具体选用,如前面的玉雕效果图,如果换成其它图片,效果不一定那么好,反过来也可以说,那张图用玛瑙色效果就差多了。
关于填充效果图的介绍就到此为止,欢迎朋友们提出改进意见。
最后重申一下,该效果确是本人无意中搞出来的,如果已经有类似的方法,纯属巧合,本人不和你争“专利权”了。
文章中使用GDI+版本下载地址和说明见《GDI+ for VCL基础 -- GDI+ 与 VCL》。
文章中所用数据类型及一些过程见《Delphi图像处理 -- 数据类型及内部过程》,《Delphi图像处理 -- 图像像素结构与图像数据转换》和《Delphi图像处理 -- 图像缩放》。
尽管我十分努力,但水平有限,错误在所难免,欢迎指正和指导。邮箱地址:
maozefa@hotmail.com
注:本文章与2009.10.30重新整理。
分享到:
相关推荐
最新版 delphi-modbus-develop 1.6.7
本文将重点讨论如何在Delphi集成环境中利用OpenCV进行开发,以及一个特别针对Delphi 2010到XE8优化的OpenCV组件——"Delphi-OpenCV-master"。 首先,"Delphi-OpenCV-master"是专为Delphi 2010至XE8版本设计的OpenCV...
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" 是一个针对 Delphi 用户的 FFmpeg 头文件包,包含了 FFmpeg 3.0.2 版本的 Pascal 头文件,适用于 Delphi 的 FFVCL 库。 FFVCL (FFmpeg Video Component Library) 是一个 ...
在本文中,我们将深入探讨如何在Delphi XE4中实现图像处理,特别是创建类似浮雕效果的功能。原函数仅支持.bmp格式的图像,但经过改进后,它能够处理多种图像格式,为开发者提供了更大的灵活性。 首先,让我们理解...
在Delphi编程环境中,开发一款图像旋转控件是一项常见的任务,尤其对于那些涉及到图像处理的软件。本控件,名为“rotateimage.v1.4”,显然专注于提供图像旋转功能,使得用户可以方便地对图像进行角度调整。这个控件...
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版本——Indy 9和Indy 10。 Indy(Internet Direct)是Delphi和C++Builder中的一套网络库,提供了一组跨平台的...
标题中的"delphi-modbus-tcp三方控件,支持Delphi11"表明这是一个专为Delphi编程环境设计的第三方Modbus TCP库,用于在Delphi 11应用程序中实现Modbus通信。Modbus是一种广泛使用的工业通信协议,主要用于设备间的...
"Delphi-OpenCV-master.zip"这个压缩包,正是将OpenCV库与Delphi开发环境紧密结合的一个项目实例。 首先,我们来理解一下Delphi中的OpenCV集成。OpenCV本身是用C++编写的,但通过Pascal封装,可以在Delphi中无缝...
本项目“Delphi-OpenCV-master 2.4.13”是将OpenCV库与Delphi集成的实践案例,适用于Delphi 2010到10.3的开发环境。Delphi是一款强大的面向对象的 Pascal 编程工具,常用于桌面应用开发,与OpenCV的结合使得开发者...
Delphi26Binaries-2019.27-.pak
8. **执行文件(exe)**:提供的可执行文件可能是对源代码的编译结果,可以直接运行以查看图像处理效果,这对于验证源代码的正确性或快速测试非常有用。 毕业设计和演示文稿部分可能包含关于如何将上述知识点整合到...
在本文中,我们将深入探讨与"数字图像处理"相关的主题,特别是关注"空间滤波"、"非线性滤波"、"梯度边缘增强"这些技术,并结合使用Delphi编程语言实现源代码的角度来讨论。这些技术在图像分析、计算机视觉以及图像...
Kassl-dOPC4Delphi-Trial-Setup.exe
"Delphi-Cross-Socket-master"中的项目可能包含了完整的客户端和服务端示例,通过查看源代码,我们可以学习如何配置Socket组件,如何编写事件处理代码,以及如何进行跨平台调试和测试。 总的来说,"Delphi-Cross-...
**Delphi图像处理单元**是基于Delphi编程环境中用于图像操作和处理的组件或库。这个单元集成了GDI+(Graphics Device Interface Plus)技术,提供了丰富的图像处理功能,包括但不限于图像加载、显示、保存、裁剪、...
OPEN CV LIBRARY for DELPHI
Delphi提供了一系列的函数,如UrlEncode和UrlDecode,来处理这些情况。例如,空格通常被编码为"%20",而其他非ASCII字符也会转换为百分号加上它们的十六进制表示。 Base64是一种用于将二进制数据编码为ASCII字符的...
《Delphi数字图像处理及高级应用》是一本深入探讨如何使用Delphi进行高效、精确的数字图像处理技术的书籍。Delphi,作为一个强大的面向对象的编程环境,因其高效的执行速度和丰富的库支持,成为了开发图像处理软件的...