精华内容
下载资源
问答
  • 当把元数据加到数字内容的MXF(素材交换格式)标准通过EBU于2002年推出时,当时曾预期广播机构将会迅速无缝地管理其所有来自不同厂家的制作、后期和分配系统上的数字内容。  六年过去了,MXF已经在广播机构中得到...

    1.实现MXF的诺言——格式只是迈向可互操作内容管理的一步

    当把元数据加到数字内容的MXF(素材交换格式)标准通过EBU于2002年推出时,当时曾预期广播机构将会迅速无缝地管理其所有来自不同厂家的制作、后期和分配系统上的数字内容。
        六年过去了,MXF已经在广播机构中得到广泛采用,但支持者现在认识到为制定可完全互操作、与厂家无关的管理标准还有很长的路要走。
        先进媒体工作流程协会AMWA(前先进创作格式协会)在NAB2007组织了MXF母版制作格式项目的首次公开演示。演示重点包括用MXF元数据从一个档案库调用文件,以便在播放期间动态实时插入一段波兰语录音。
        作为MXF的共同制定者,AMWA一直在与Pro-MPEG Forum和SMPTE合作。据AMWA一份报告,此过程的的根源在于为一个内容管理链中任何人都可公开获得的文件传输格式开发开放性标准的挑战。在理想情况下,MXF通过改善内容创作工作流程,而元数据无需重复性地再登录,支持所有数字视频、音频和图形文件的无缝处理。

        包裹单
        “MXF是一种开放的文件格式,针对带相关数据和元数据的音视频素材的交换,”史诺伟思技术副总裁兼此标准总架构师Bruce Devlin表示,“其设计和执行宗旨是改善服务器、工作站及其它内容创作设备之间的基于文件的互操作性。”
        今年1月在史诺伟思公司举行的AMWA欧洲会议回顾了过去6个月与MXF有关的工作,其中包括新近成立的媒体服务架构组(MSAG),此小组负责提供关于数字媒体工作流程中企业级软件技术的架构和最佳惯例。
        MSAG的工作包括建立一个提供协作编辑他们的文件之环境的平台。开始时的一个重点放在为面向服务的架构(SOA)和万维网服务开发一个术语表。
        作为迈向标准化服务接口的一步,该小组还检查采集过程。
        “MXF现在是一个相当公认的行业标准,在专业视频领域内得到广泛支持,”Avid公司基础设施解决方案总监Sam Bogoch表示,“要点是MXF为不同种类的元数据提供一种包装器,就像一张描述内部物品的包裹单。”
        哈里斯电视软件产品部产品市场总监Candy Helgerson称,此“包裹单”帮助用户更有效地管理其资产。“现在我们能够存储资产,有需要时搜索相关元数据。这适用于用MXF包装的任何资产,不管它在哪儿取得。”
        她补充说:“MXF正在满足对支持内容数据开包和转换为元数据的数字资产管理产品的需求,我们发现大量感兴趣的MXF新用途,因此我们对取得的进展非常乐观。”

        事实标准
        MXF正日益成为新产品事实上的标准交换格式,汤姆逊草谷系统解决方案部市场总监Eric Dufosse表示。“但采用旧格式的广播设施内仍有许多传统的系统。”
        Dufosse认为MXF未得到充分利用。“建立完全透明的互操作性过程还任重道远。使用一种与MXF一样大的格式标准,你必须确保文件本身是真正兼容的,而非只是元数据。”
        主档的MXF主要被用于只有一层的单独片段,Dufosse说,“正在扩展此模式以便利用MXF的在多个层上处理多个片段的能力的人士和公司不多。正在转向较复杂档的MXF的有关单位也不多见。”
        特纳广播系统公司全球广播技术和标准高级副总裁Clyde Smith证实此标准已较普及。“我们所做的一个调查显示10万套多种多样的支持MXF设备已销往市场。就算你不相信每一个新闻稿,你仍可以说有大量的MXF设备被实际部署。”
        Smith表示,大部分这些设备被限制于MXF最简单的OP-1A层。“此层产生工作流程内的优点,但随着你进入更复杂的工作流程,如自动化再创作内容以便分配给其它平台,你发现需要超越OP-1A。”
        一个主要的例子将是广播一个多语种的节目,该节目每天不同时间、不同地理区或因文化敏感而有变动。
        Smith说:“MXF更复杂层将使你跨所有语言变化再创作内容,因此主体保持不变,但字幕、致谢名单和音轨可充分利用这些高级层,选择和显示终端用户挑选的无论哪种内容。”
        制造商现正进入MXF更高和更复杂的层,Smith补充说,“但它是一个教育过程的一小段。MXF是非常大的工具包,业界正在学习哪些MXF工具用于哪些问题。”
        特纳和PBS都在与厂家合作开发高级MXF的播出应用程序。NBC正在把更高层应用于奥运会。
        “在某地的人士可以使用MXF编辑一个节目的一部分,而别的地方的编辑可处理另外的部分,”Smith说,“他们不必在他们之间来回地传输整个节目就可以工作,只需要他们实际在使用的那一部分。而且他们不用担心分离部分在成品中无缝地结合的问题。”
        Smith表示,时间和带宽成本的实在节省是你从MXF高级层获得的一些主要优点。

        现实检验
        Pro-Bel美国公司总裁Neil Maycock表示,当人们认识到MXF是一种能使数字产品可互操作的标准时,它在其最初几年中经受了现实检验。
        “现在我们对MXF能够实现互操作性已经有很深的认识,但它并不保证你的产品将与来自其它厂商的产品兼容。”
        Smith说,MXF规范是如此之大,以至于你不可能令每一个设备和应用软件与MXF每一部分百分之百兼容,因此你必须开发实际的实施工具。现在要求的东西是终端用户和厂家提出MXF标准内切实可行的模式,此模式将跨多个厂商和多种设备实际运行。
        Dufosse表示赞同。“我们需要更好的粘合剂令所有产品协调地通信,而MXF就是此向系统一体化迈进的更大趋势的一部分。”
        Bogoch把MXF视为为终端用户隐藏媒体资产管理系统的复杂性的一种方式。
        “行业的未来是相当丰富多彩的媒体环境,在此环境下工作可以例行公事地做,而5年前是根本不可能的。例如,Avid正在开发简化的API,它不用终端用户编写复杂的脚本,即支持交换格式。”
        随着MXF采用的普及,广播设施其它组成部分都感受到其影响,如自动播出系统。
        “我觉得MXF的大量采用的趋势摆明自动化的元数据成为一种标准格式,”哈里斯公司Helgerson表示,“我们将看到电视台内有更多的MXF与业务系统(如销售和交易等)的集成,因此广告代理可以发送一个以MXF打包的商业广告,就不用再想有关问题了,如什么时候、什么位置它可以播出,或者此广告是否与电视台的非线性编辑系统或广告插播服务器兼容。”
        Maycock预测MXF最终将与新SMPTE广播交换格式(BXF)集成在一起,BXF是一种基于XML的标准编程接口,用于服务器、自动播出系统和交易记录系统之间路由和显示信息的传送。
        “MXF和BXF正在为电视台运作中多种媒体格式管理的总过程解决犬牙交错难题的一些主要部分,我们还在考虑最终实现数字媒体的愿景。”

        一种发展中的标准
        Omneon视频网络公司产品市场副总裁Paul Turner认为今后几年MXF的最高级将得到广泛采用。
        “所有厂家开始时都通过基本的OP-1A产品慢慢启动,原因是每一种设备都必须能处理作为文件传送最低共同点的OP-1A元数据,档案库存储器公司明白这种需求,服务器公司、编辑系统公司等等也都明白。”
        他说,MXF已经获得了推动力,现在像Omneon等的公司都在生产100%的MXF产品。最高境界是能一次性地创作在任何地方都可播放的文件。
        尽管如此,Turner仍视MXF为一种发展中的标准。“MXF是难以置信的大规范,MXF的创制者是非常聪明的人,他们拥有为你能想象的每一个工作流程模式提出交换规定的远见卓识。面对那么大规模的规范,对每种工作流程应用仍有大量工作要做。”



    二:数字电影母版制作技术


    【摘要】 随着数字电影技术的进步,先进的数字电影母版制作技术在国外已经得到广泛的应用。我国数字电影母版制作已经有比较长的时间,目前母版制作技术水平与国外还存在一定的差距。本文详细介绍了数字电影母版制作流程、相关技术细节和实践经验,以供数字电影母版制作系统应用与开发人员参考。

          【关键字】数字电影数字影院数字电影发行母版数字电影母版制作KDM数字电影发行数据包
         

          一、引言

          数字电影改变了影片加工制作的方式,在数字影片加工制作环节,数字母版制作是关键的技术和流程。数字电影母版制作指的是将数字电影发行母版(DCDM)经过压缩、加密、打包等技术处理,形成发行到影院的数字电影数据包(DCP)的系统过程。

          在数字电影发展初期,数字节目文件格式没有统一,市面上存在着着多种数字电影服务器厂商,也存在多个与之对应的数字电影母版制作系统。一部影片在母版制作阶段,必须经过多个厂商的母版制作系统进行加工处理,因为没有统一的发行格式导致发行成本增加;也导致影片在不同放映服务器之间不具备互操作性和互交换性;加密和版权保护系统不能够统一;广告片、预告片和故事片被习惯性的编码在一起,这些都严重地阻碍了行业的发展。通过国际标准化组织的多年努力,到2007年底发行节目文件格式标准终于得以确定,至此,数字电影母版制作技术有了统一的标准可以参照。

          传统胶片电影以胶片为载体,无论是广告片、预告片还是故事片,都以“本”(reel)的形式存在,胶片上包含着图像、声音和字幕等信息,影院放映时需要将不同的“本”由两台放映机轮流放映或在大盘上接在一起放映。数字电影与传统胶片电影之间有一定的映射关系,数字电影以数字存储介质为载体,放映的节目内容为了替换、编辑、存储、传输方便被分为多“本”,图像、声音和字幕都以轨迹文件的形式单独存储;在影院服务器上播放时,首先编排好放映播放列表,节目素材依照播放列表中指定的顺序进行播放。

          以上是将传统胶片电影转换为数字电影的一些特征。可以看出,数字电影母版制作虽然有别于传统胶片电影底片制作,但在母版制作过程及最终生成的DCP中仍然保留着传统胶片电影“本”的概念。数字电影与传统胶片电影之间的映射关系及“本”的含义是讨论数字电影母版制作工作流程首先要理解的概念。

          二、 数字电影母版制作工作流程

          典型的数字电影制作系统过程如图1所示:

    图1  数字电影制作系统过程

          影片图像经过数字中间片(DI)系统处理,再经过色彩空间转换(转换为X`Y`Z`色彩编码)形成图像文件,连同声音文件、字幕文件等DCDM文件作为母版制作系统的输入数据。母版制作系统将图像文件压缩、加密、封装为图像轨迹文件,然后与封装形成的无压缩音频轨迹文件及字幕文件进行同步并合成,最后打包、资产映射形成符合标准的数字电影发行数据包(DCP)。

          数字电影中,影片素材的轨迹文件封装格式为MXF(SMPTE 372M)文件格式。这里轨迹文件分为图像轨迹文件、声音轨迹文件和字幕轨迹文件三类。一个轨迹文件代表一个“本”所包含的图像、声音或字幕数据。

          数字电影母版制作过程如图2所示:

    图2  数字电影母版制作过程

          首先需要对输入的大量数据进行验证,控制输入数据的质量。图像数据是所有输入数据中文件数量最多、占用存储空间最大的数据。按照SMPTE 428-5标准要求,图像数据为单帧TIFF文件形成的文件序列。一部影片所包含的TIFF文件大约有20万个,如果图像为2K的数据,占用的存储空间大约为2TBytes,4K的数据量是2K数据占用存储空间的4倍。声音数据按照SMPTE 428-4标准要求,为单个广播波形WAV文件,对应每个“本”每个声道,也就是说每“本”6个文件,6“本”5?1声道的影片需要36个WAV文件。

          接下来母版制作系统对无压缩TIFF文件进行编码压缩处理,为每个TIFF文件生成JPEG 2000压缩码流文件。之后,图像、声音都进行MXF封装(加密)形成MXF轨迹文件,通过调整合成播放列表(CPL)中各轨迹文件的入点和持续时间,使图像轨迹和声音轨迹同步。再下一步,将合成播放列表、轨迹文件等影片素材打包形成DCP,存储到物理介质中。最后一步是最终质量控制,确保当前版本的影片内容在影院可以正常播放。

          三、 数字电影母版制作技术

          1、色彩空间的转换

          色彩空间的转换是母版制作系统处理图像数据时经常要面对的问题之一。存储于DI系统的数字源母版(DSM)通常为RGB图像文件,DSM到DCDM需经历两次转换过程。首先,DSM色彩编码转换为XYZ编码;然后,XYZ编码转换为X`Y`Z`编码,最终DCDM图像文件是X`Y`Z`编码的TIFF文件。DCDM色彩编码的基础是CIE XYZ三色刺激值系统,这些值与光是线性关系,而人眼与光是非线性相关。因此必须将XYZ进行以下编码转换:

          CVx′=INT[4095×(L×X52?37)1/2?6]

          CVy′=INT[4095×(L×Y52?37)1/2?6]

          CVz′=INT[4095×(L×Z52?37)1/2?6]

          式中:INT代表四舍五入,L为放映机白光亮度。

          由于实际的DSM图像文件具有多种色彩空间类型,母版制作系统除接收符合SMPTE 428-5要求的X`Y`Z`文件外,也允许接收其他色彩空间图像文件,包括:DCI P3 R`G`B`、XYZ、ITU Rec?709 R`G`B`等。在母版制作系统中处理这些色彩空间的转换会消耗一定的时间,影响母版制作的效率。

           2、数字导片

          数字导片是为方便质量控制在每个“本”的影片内容画面前后增加的内容片断。如下图所示:

     

    图3   数字电影导片

    图3   数字电影导片

          头部导片中第一帧是起始画面,随后是6秒钟的倒计时画面,在145帧处为“pop”信号,用于最终质量控制(Final QC)时验证音话同步。整个头部导片为8秒钟,共192帧。头部导片后紧跟的影片画面第一帧称为FFOA(the first frame of action)。尾部导片的第48帧同样有一个“pop”信号,是音画同步的第二次确认。尾部导片为4秒钟,共96帧。尾部导片第一帧之前的影片画面最后一帧称为LFOA(the last frame of action)。

          母版制作过程形成“本”的轨迹文件后,轨迹文件中应该已经包含有头部导片和尾部导片,影院播放的影片CPL中,各“本”指定的入点应位于头部导片之后。

          3、输入数据的质量控制

          母版制作过程需要消耗很长的时间,特别是图像的压缩、封装和加密过程。所以验证输入数据的正确性非常必要,否则一旦失败就要付出时间代价,可以人工或者编写脚本自动对文件进行处理和验证。

          图像的验证包含以下几个部分内容:

          (1)验证特定“本”文件目录下的文件序列是否有缺失、文件命名是否符合要求

          文件的缺失会导致编码压缩过程失败或创建MXF文件失败,文件命名的错误会导致找不到要处理的文件。

          (2)验证TIFF文件具有正确的图像结构

          通过查看TIFF文件属性可以验证是否具有正确图像结构:

          图像结构错误会导致编码器或解码器异常。

    表1


     

          (3)验证查看每个“本”的FFOA和LFOA在文件序列中的位置

          (4)确定图像所使用的色彩空间

          可以使用专用显示设备并依据经验查看图像文件色彩是否正常。

          为了在最终质量控制中验证“本”之间的连续性,验证图像过程中可以完成以下表格:

    表2

          声音的验证需要使用专业软件,主要是验证音频采样率是否为48?000kHz,“pop”声与图像频率是否严格对齐。如下图所示,以每秒24帧,采样频率为48kHz计算,每帧音频有2000个采样。48000 samples/sec /24 frames/sec = 2,000 samples per frame。“pop”声音的2000个采样要与帧完全对齐。

    图4  数字声音与图像的对齐方式

    图4  数字声音与图像的对齐方式

          值得注意的是,数字电影与胶片电影对齐方式存在不同,我国电影国标要求声音提前一格,数字电影中没有这个要求。

          4、JPEG 2000压缩编码

          数字电影压缩图像数据使用的是JPEG 2000的帧内编码方式。由于JPEG 2000支持2K/4K图像分级,4K DCDM编码的数据可以在只支持2K解码的影院服务器上播放,这种情况下影院服务器只提取4K数据中2K的数据进行解码,事实上剩余部分是非常细节的图像数据,编码后所占数据量很少。2K影片压缩比是10∶1、原始10M的TIFF单帧文件,压缩后平均为1M。实际压缩根据画面复杂程度压缩比会有不同,动画片压缩比约为20∶1。变形宽银幕(Scope)比遮幅宽银幕(Flat)多了大约20%的像素数,所以码率会高一些。

          使用软件编码方式、利用高速存储网络、分布式计算是主要的JPEG 2000编码方式。这种方式下节点的数量和性能、网络与存储速度是编码执行速度的关键因素,如:Dolby、GDC、DTS等公司的产品。Doremi DMS 2000母版制作系统使用的是基于硬件的JPEG 2000压缩技术。JPEG 2000编码时有两种选择,固定比特率(CBR)编码或可变比特率(VBR)编码。

          CBR方式比特率恒定;VBR可以有效增强内容传输的效率,对于VBR方式不同厂商有不同压缩编码策略。

          5、数据的封装、加密与打包

          封装(Wrapping):形成MXF轨迹文件的技术。

          打包(Packaging):将媒体素材制作为DCP的技术。

          数字电影母版制作最终形成的文件主要有两种:一种是MXF轨迹文件;另一种是XML文件。JPEG 2000码流、声音WAV数据内容可以以明文(不加密)或密文(加密)的方式封装到MXF容器内。封装与打包的概念容易混淆模糊,打包过程主要是形成用于描述DCP的XML文件,并将CPL、轨迹文件等素材文件存储于指定物理媒介上。母版制作过程中的MXF封装技术与DCP打包技术是母版制作的核心技术。

          (1)MXF

          MXF(Material eXchange Format 素材交换格式)是SMPTE定义的一种专业媒体文件格式,典型的MXF文件结构如图5所示:

    图5  MXF文件结构

    图5  MXF文件结构

          文件头部主要包含用来描述MXF文件信息的元数据,解析这些数据MXF解码器能够获知MXF文件的创建信息、格式结构信息,并能够方便地定位文件的各个分区,找到文件的索引表片段,进而定位某一帧。MXF的元数据功能非常强大,以MXF作为容器,其元数据能够详细地描述容器中数据的特征。SMPTE 330定义的UMID(Unique Material Identifier 唯一素材标识符)是MXF的重要元数据之一,数字电影识别、引用轨迹文件所使用的UUID(Universally Unique Identifier 通用唯一标识符)值来源于UMID值。

          MXF文件内部结构根据不同应用场景可以有不同的复杂度,数字电影中使用了最简单的SMPTE 390M OP-ATOM操作模式。因此,数字电影MXF文件的实现相对于电视行业要简单得多。

          KLV(键-长度-值)三元组编码是MXF底层编码协议,数字电影图像和声音数据都逐帧封装到KLV中。对于图像来说,V代表了一帧图像。声音的封装有一定的声道顺序,每个声道2000个采样的数据按照SMPTE 428-3要求的声道顺序映射在V中。

    表3

          (2)DCP

          数字电影声音与图像封装打包的过程如图6所示:

    图6  数字电影声音与图像封装打包过程

    图6  数字电影声音与图像封装打包过程

          声音和图像经过处理后都成为MXF轨迹文件,合成播放列表CPL代表了影片的特定版本,只需要更改合成播放列表中对轨迹文件的编辑、引用信息,就能够形成不同的影片发行版本。如:同一部影片,通过替换声音轨迹文件可以形成不同语言的影片版本;或者,通过更改轨迹文件的入点、持续时间删减影片的某部分内容。打包完成后,DCP已经存入到物理介质中。以单分区移动硬盘作为存储介质存储影片为例:打包过程形成了打包列表(PKL)文件、资产映射文件(Asset Map)和卷索引文件(Volume Index用于标识当前硬盘序号),后两个文件位于硬盘根目录下。资产映射文件中描述了其他文件资产所在路径,如图7所示:

    图7  DCP的构成

    图7  DCP的构成


          打包列表主要用于说明DCP中包含那些资产,并且包含各文件的哈希值,用于验证资产完整性。2K 2D影片容量约为140GB,目前一块普通硬盘就能够装载一部以上的影片。由于发行成本、运营习惯等因素的限制,物理媒介目前仍然是主流的影片分发方式。

          (3)KDM

          安全是数字电影必须提及的问题,密钥传送消息KDM是数字电影加密授权所使用的核心技术,也是母版制作系统使用的技术之一。对内容素材进行加密是母版制作过程中可选的一项功能,AES-128数据加密发生在MXF数据封装之前,将加密的数据映射到MXF容器,形成加密的MXF轨迹文件。

          KDM中包含有影片解密密钥和授权放映时间窗等信息,KDM中影片解密密钥被目标设备公钥加密,只有目标设备可以解出影片解密密钥。母版制作系统可以为影院放映设备生成KDM,但是这就要求母版制作系统具有密钥管理的功能。管理大量影院设备的授权不是母版制作系统的主要功能,实际运营中母版制作系统只需要生成针对密钥管理系统的KDM,另由独立的密钥管理系统完成密钥的管理和KDM的生成、分发。

          6、最终质量控制

          最终质量控制是数字电影母版制作的最后一步。这个过程要在具有良好硬件放映环境的地点进行。为确保影片的质量满足发行对质量的要求,主要需检查图像画面质量、“本”之间连续性、是否有异常声音、声话是否同步等。待检验合格后,方可下发影片DCP到影院。

          7、影片命名习惯

          影片命名也就是合成播放列表CPL中“Content Title Text”的命名,适当的影片命名习惯有助于影片内容的识别和管理。国外影片命名有约定的格式,如以下影片命名:

          PIRATES-2_FTR_S_EN-LAS_US-13_51_2K_DI_20060607_TDC

          加勒比海盗-2故事片,变形宽银幕,英语,西班牙语字幕,PG-13分级,5?1声道,2K分辨率,迪斯尼制作。2006年6月7日特艺色打包。

          3D-TEST-GAO_TST_F_CMN-XX_CN-XX_51_2K_ZX_20080318_CRIFST-i3Dngb

          3D测试片,遮幅宽银幕,普通话,无字幕,无分级,5?1声道,2K分辨率,ZX制作。2008年3月18日科研所打包。

          以上命名习惯对影片的描述包含了影片名、影片画幅格式、语言、字幕等,每个信息字段都在固定的位置。目前影片命名不支持汉字只能使用英文,因此在母版制作中应习惯使用英文,并养成固定的影片命名习惯。

            8、字幕文件的制作

           字幕是数字电影除图像、声音以外的又一内容资产。当前阶段使用的是TI的技术标准- 《Subtitle Specification (XML File Format) for DLP CinemaTM Projection Technology》。现存母版制作系统可以接收已经做好的符合TI标准的字幕数据,在合成阶段将字幕与声音、图像组织在一起,每个“本”只能有一个字幕文件。

            依据TI的标准,字幕可以是文本和图片两种方式。文本字幕简洁、数据量小,但显示效果在不同放映机上有可能不固定;图片字幕的缺点是数据量大,但是显示效果稳定,而且可以有透明度的选择。文本字幕,使用的是True Type 字体文件;图片字幕使用的是PNG文件。受TI技术的限制,目前使用的True Type字体库文件大小不能超过640KB,必须使用专用工具在字体库中对字幕中出现的字体进行筛选过滤,以缩减字体库尺寸。过滤后90分钟中文字体大小可以在300K左右。

          四、 总结与展望

          数字电影母版制作技术是比较新的应用领域,涉及众多新制定的数字电影国际标准。在国外,先进的母版制作技术已经得到较为广泛的应用,一些大的发行单位已经严格按照流程完成母版制作过程,这样就满足了数字电影大批量发行制作的需求,确保了影片制作的稳定性。在我国,数字电影母版格式还没有统一,制作过程也没有形成格式化的流程,在此方面,我国应该学习吸收国外先进的母版制作技术和经验,形成我国自己的母版制作标准流程。

          笔者认为未来数字电影母版制作系统将逐步得到完善,随着字幕MXF轨迹文件标准的公布,行业内将不再使用TI的字幕技术;由于数字方式可以携带丰富的元数据,利用数字化这一特点,将封闭式字幕(Closed Caption)、外部设备指令信号等更为丰富的数据信息加入到母版制作系统中会改变数字电影固有的放映模式;专业母版制作系统功能的增加导致系统操作更为复杂,成熟易用的系统操作界面会成为操作应用的实际需求;为推动我国数字电影技术的普及和发展,加大数字电影技术的应用与创新,应实现数字电影母版制作系统的国产化,以满足我国母版制作和管理的特殊需求。

          参考文献

          [1 ] DCI,数字电影系统规范 V1?2;

          [2 ] SMPTE, Proposed 428-1? For Cinema  Sound and Picture Track File;

          [3 ] SMPTE, Proposed 428-2? For Cinema  Audio Characteristics;

          [4 ] SMPTE, Proposed 428-3? For Cinema  Audio Channel Mapping;

          [5 ] SMPTE, Proposed 428-6? For Cinema  Digital Leader;

          [6 ] SMPTE, Proposed 429-3? For Cinema  Sound and Picture Track File;

          [7 ] SMPTE, Proposed 429-4? For Cinema  MXF JPEG200 Application;

          [8 ] SMPTE, Proposed 429-6? For Cinema  Track File Essence Encrytion;

          [9 ] SMPTE, Proposed 429-7? For Cinema  Composition Playlist;

          [10] SMPTE, Proposed 429-8? For Cinema  Packing List;

          [11] SMPTE, Proposed 429-9? For Cinema  Asset Mapping;

          [12] SMPTE, Proposed 430-1? For Cinema  Key Delivery Message;

          [13] SMPTE, Proposed 430-2? For Cinema  Digital Cinema Certificate;

          [14] SMPTE, Proposed 430-3? For Cinema  Extra-theater Messaging;

          [15]《The EDCF Guide to DIGITAL CINEMA MASTERING》,2007;

          [16] 《Subtitle Specification (XML File Format) for DLP CinemaTM Projection Technology》;


    展开全文
  • 中国工业报2020“智造基石”优选榜近日正式揭晓。本次活动分为工业互联网、智能制造、数字化转型三个方向,以挖掘相关领域的优秀服务商及其解决方案,以及在数字化转型中成效突出的工业企业、人物(...

    中国工业报2020“智造基石”优选榜近日正式揭晓。本次活动分为工业互联网、智能制造、数字化转型三个方向,以挖掘相关领域的优秀服务商及其解决方案,以及在数字化转型中成效突出的工业企业、人物(团队),总结和推广相关经验,推动互联网、大数据、人工智能、区块链等新一代信息技术与实体经济的深度融合。

    完整榜单见下文,并附有上榜企业先进实践分享。

    海尔卡奥斯物联生态科技有限公司、树根互联技术有限公司、用友网络科技股份有限公司、太极计算机股份有限公司、中国联合网络通信集团有限公司、特来电新能源股份有限公司入选“工业互联网杰出贡献企业”,达索析统(上海)信息技术有限公司(达索系统)入选“智能制造杰出贡献企业”,上海优也信息科技有限公司、震兑工业智能科技有限公司、云镝智慧科技有限公司、成都积微物联集团股份有限公司、橙色云设计有限公司、松立控股集团股份有限公司入选“工业互联网年度新锐企业”。

    以下为中国工业报2020“智造基石”优选榜详情(排名不分先后)。

    2020“智造基石”优选榜总计产生62个入选项目(企业、人物/团队、方案、案例、园区),反映了2020年工业互联网、智能制造、数字化转型等领域的一系列亮点、成绩与发展趋势。

    工业互联网杰出贡献企业

    海尔卡奥斯物联生态科技有限公司

    大规模定制国际标准制定者,工业互联网独角兽企业。连续2年被工信部评为双跨平台。推出了具有中国自主知识产权、引入用户全流程参与体验的COSMOPlat工业互联网平台。布局了先进智造、大数据应用、人工智能等六大实验室,采用增值分享的小微创业机制,通过“大企业共建、小企业共享”的赋能路径,逐步构建起“1+X+N”的生态体系,涵盖7大领域、15个行业、12大区域,并在全球20多个国家进行生态复制,赋能传统产业与中小企业实现数字化转型升级。参与5项国际、36国家标准制定,是唯一被三大国际标准组织(ISO、IEEE、IEC)批准牵头制定大规模定制国际标准的企业。其赋能的海尔2家互联工厂入选世界经济论坛全球灯塔工厂,使海尔成为首个在同一个国家拥有两个灯塔工厂的企业。

    树根互联技术有限公司

    根云(ROOCLOUD)平台连续2年入选国家工信部“跨行业跨领域工业互联网平台清单”。2020年12月17日完成C轮8亿元融资。是中国唯一一家连续两年入选Gartner IIoT 魔力象限的工业互联网平台企业。打造了包括工程机械、环保、铸造、注塑、纺织和定制家居等在内的20个产业链平台,赋能达81个细分行业,带动一大批上下游企业完成数字化转型,助推中国制造业实现提质增效。积极扩展海外市场,已为50个国家和地区的企业提供服务。平台基于工业区块链平台、工业AI中台、数据中台,与IIoT平台共同组成“ABIoT平台层”,帮客户实现“快速开发、快速部署、快速交付”,降低接入成本。同时让5G、区块链、AI等前沿技术落地,深入工业制造现场中,以解决真实问题为价值引导。目前与各地政府共建区域产业集群平台已有4个;赋能生态伙伴数量较上年增长超过50%。

    用友网络科技股份有限公司

    用友精智工业互联网平台连续两年入选工信部“十大跨行业跨领域工业互联网平台”。不仅提供设备物联、智能制造服务,还能够提供设计、营销、采购、供应链、物流、财务、资产、人力资源、金融、协同办公等全面的企业云服务,实现了工业企业全要素、全产业链、全价值链的连接。用友深度参与工业互联网标准与工业互联网创新发展工程建设,积极参与各省市的工业互联网平台建设。不仅打造了具有完全自主知识产权的工业PaaS云平台、数据中台、AI中台和基于5G的物联网技术平台-AIoT智能物联网平台,还打造了我国新一代工业软件(工业APP)的领先优势,带动国产操作系统及数据库/IaaS(云计算平台)、服务器和芯片(包括物联网芯片)的快速创新发展。

    太极计算机股份有限公司

    作为中国电科旗下软件与信息服务业龙头企业、自主可控总体单位,太极股份凭借综合沉淀已久的业务与服务优势及产品创新力,充分发挥工业互联网领域工业基因与客户积淀优势,为以能源、电子制造、装备制造为代表的工业企业,提供数字化服务,帮助企业实现生产、服务和资源的整体优化;充分发挥自主创新能力,以工业互联网“新基建”为契机,打造从软硬件基础、计算技术、工控安全,到工业软件的核心工业信息技术体系。目前,太极TECO工业互联网已为中国电科、中国华能、浙能集团、国网新源等为代表的电子制造行业和能源行业用户提供了多种产品与服务,赋能工业企业数字化转型升级。同时,以“太极工业互联网生态圈”品牌效应为依托,构建了“区域性工业互联网平台”及“本地化运营和工业互联网创新基地”,满足“产业聚集的工业园区的数字化服务”需求。

    中国联合网络通信集团有限公司

    作为建设网络强国的国家队和主力军,中国联通加快实施“5G+工业互联网”512工程,积极推动5G与云、大、物、智、安、链等领域的融合创新,着力助推各行各业转型升级,致力于成为数字基础设施提供者、5G﹢工业互联网创新服务者。依托自身基础网络能力、数据能力等资源禀赋,中国联通为9+1行业进行数字化转型服务,已打造了“两张网,一平台,一朵云”核心能力体系,并推出了“5G+工业互联网行动计划”和“5G+工业互联网应用场景联合创新计划”,为企业客户提供定制化、模块化、体系化的工业互联网服务。

    特来电新能源股份有限公司

    充电网是电动汽车的基础支撑,是将车联网、能源网、互联网深度融合的“新工业互联网”,是工业互联网最大的应用场景,是新能源和新交通双向融合的全新生态产业。根据国家能源局和充电基础设施联盟公布的数据,特来电建设了中国规模最大,技术实力最强的汽车充电网。目前,特来电还是世界充电网技术开创者和标准制定者。公司首创“基于新能源汽车安全的充电网两层防护技术”,可有效减少烧车事故73%,解决了世界性烧车难题。目前运营服务城市已达346个,已成立127家城市运营公司,支撑420万辆电动汽车充电。

    智能制造杰出贡献企业

    达索析统(上海)信息技术有限公司(达索系统)

    物理世界与虚拟世界的融合正在不断发生和发展,这推动着人类社会迈向更激动人心的未来。作为一家为全球客户提供物理世界与虚拟世界融合所需使能技术的行业领导者,达索系统利用3DEXPERIENCE平台和行业解决方案,服务于全球140多个国家超过29万个不同行业、不同规模的客户,并为他们带去包括商业变革在内的重要价值。近年来,达索系统不断加大对中国的投资力度,服务于中国客户智能制造的同时,也与中国客户共同发展。展望中国数字经济前景,有理由相信更大的成就一定就在不远处。

    工业互联网年度新锐企业

    上海优也信息科技有限公司

    2019年发布Thingswise iDOS工业互联网平台,同年启动工业互联网“开发者社区”建设。公司以Thingswise iDOS平台、工业智能应用系统和运营转型咨询服务的三位一体综合解决方案服务客户。Thingswise iDOS及其数字孪生体框架为核心的PaaS系统可边可云,应用研发轻量化,具备更稳定可靠的兼容性等特点。工业智能应用系统以数据、模型、应用三个要素构成多个层次的闭环优化,空间上覆盖各生产要素,时间上覆盖全生命周期工艺技术和知识,形成工业化与信息化的深度融合及持续改善提升。自成立以来,为多家基础工业企业落袋总计超过年化15亿人民币的降本增效收益。服务于上海电力、山钢集团、永锋集团、兖矿集团、平煤神马、广东溢达等大型企业。

    震兑工业智能科技有限公司

    震兑是中船集团与中信集团两大央企混合所有制改革试点的工业互联网高科技企业。公司核心团队出自中船集团中国船舶工业系统工程研究院海洋智能技术创新中心,在智能船领域有着多年的经验和积淀,也是船舶行业最优秀、最具影响力的团队。成立1年多来,继续深耕智能船舶领域,形成“产品+服务+平台+生态”的业务模式,逐步增加市场占有率。同时,面向工业领域进行工业互联网平台建设,提供安全、经济、高效的工业数字化产品、服务及整体解决方案,为行业客户工业智能转型赋能。目前已实现规模化订单,树立了标杆客户,在整个智能船全产业链上成功布点,并在初步形成跨行业布局,在重工机械领域实现非船领域突破。

    成都积微物联集团股份有限公司

    积微物联以“达海”和“积微”双平台双品牌为核心,以技术驱动构建形成独具特色的产业互联网平台和大宗物资产业链集成服务生态圈,为用户提供钢铁、钒钛、化工等大宗商品的智能仓储、高端加工、智慧物流、在线交易、供应链金融、平台技术输出、市场配套等一站式服务和整体解决方案。公司构建的CⅢ工业互联网平台,以客户需求为导向,以提高质量和效率为目标,以整合资源为手段,实现钢铁产业从制造端到用户端的交易、生产、仓储、加工和物流等全过程高效协同。

    云镝智慧科技有限公司

    专注工业互联网平台研发与运营。云镝智慧工业互联网平台完全自主研发,全线技术自主可控。平台提供社会化服务、产业链协同、数字工厂、智能服务4大应用及产业电商、供应链协同、制造协同、智能制造、设备远程运维、数字孪生、大数据分析、AI服务等8大产品方案。先后打造了广东阳江五金刀剪云平台、余姚智能家电云平台、宁夏枸杞产业集群平台、湖南黑茶工业互联网平台、宁夏贝利特化工行业工业互联网平台,及太原工业互联网平台、郑州市工业互联网平台、银川市工业互联网平台等案例。

    橙色云设计有限公司

    橙色·云工业产品协同研发平台聚焦工业产品的协同研发,创立了协同创新和研发上云两种全新业态,开发了CDS云协同和CRDE云研发两大系统,为客户提供贯穿工业产品从需求发布到验收交付全业务流程的服务。截至2021年1月,平台总计用户注册量达到20500个企业及个人用户。线上累计发布需求 2070 余个。目前平台总计项目发布金额已接近9亿元,运转中项目数量超过1100个。

    松立控股集团股份有限公司

    国内智慧停车行业的先行者与领跑者。公司基于自主算法研发、拥有自主知识产权的“慧停车”平台,将侧向视频识别、大数据、云计算、人工智能、区块链等新一代信息技术与静态交通场景深度融合,全域覆盖路内停车、路外停车、共享停车场景,将智能识别终端采集到的交通及停车数据,通过可视化的停车管理云平台、运营监控平台、大数据分析平台,进行数据分析、预测、控制、指引等,形成线上线下场景融合、软硬件一体化的城市级静态交通管理体系。

    工业互联网年度人物

    太极计算机股份有限公司总裁助理 李庆

    作为太极数字企业业务规划与发展主要负责人,李庆具有20余年数智一体化建设经验,在以工业互联网为代表的企业生产域、以协同办公与业务管控为代表的企业管理域有深入研究。领导团队服务了60%以上中央企业,3000余家集团型、大中型头部企业。近年来,李庆带领团队,在中国电科工业互联网平台规划及建设、中国华能AIdustry流程型工业互联网平台、浙能集团工业互联网平台、华电集团数字电厂工业互联网应用、太极子集团端到端生产供应协同平台项目、数字煤矿大数据平台及云服务系统建设等众多项目中提供了全面及专业的服务,并推动太极股份企业业务的创新发展。

    震兑工业智能科技有限公司总经理 邱伯华

    长期从事工业互联网、CPS、工业智能和工业大数据研究与应用,我国船舶智能化和航运管理智能化探索者及实践者之一。担任工信部工业互联网及智能制造核心专家,参与编制国家《信息与物理系统白皮书》《智能船舶发展行动计划(2019-2021年)》等工作。我国舰艇状态评估与健康管理开创者之一,主持世界首艘智能船舶智能集成系统研制,多次获得国防科技进步奖和船舶工业科技进步奖。成功推动船舶智能技术产品化转化,并进行市场规模推广, 是该领域的杰出贡献者。邱伯华是国家科技部评审专家库专家、交通运输部专家库专家,同时还担任中国船舶集团有限公司信息自动化专家组副组长、海洋防务体系专家组及船舶工业软件论证组成员,及中国钢铁工业协会智能制造专家组专家,中信改革发展基金会高级咨询委员会委员等。

    上海优也信息科技有限公司联合创始人、董事长 傅源

    有丰富的大型跨国企业高管经验,精通工业行业能效提升,精通精益管理。曾为客户在钢铁、有色、发电、化工、造纸及水泥等基础工业的节能提效与运营转型方面创下 40 亿元年化成本节降的效益。著有译作《资源有效性运营》。优也团队由一批15 年以上一线经验的产业专家和运营管理专家组成,具有深厚的工业知识,全覆盖钢铁、化工、有色、电力、造纸及水泥等基础工业。傅源与创始团队一起,开发并推出Thingswise iDOS 平台,突破关键技术,落地重要场景,以平台、工业智能应用系统和运营转型咨询服务服务客户,在国内外顶级工业互联网组织参与标准制订等工作,同时,在钢铁等原材料行业已帮助客户取得能源优化重要进展。

    赛轮集团股份有限公司副总裁 朱小兵

    长期从事企业信息化建设、智能制造、人工智能技术领域应用及发展规划等工作。先后主持或参与了部省市近20个制造业信息化项目,带领集团信息化团队在智能制造领域积极开展关键、共性技术研究,使集团获评国家首批“智能制造试点示范企业”,牵头实施的工业互联网技术研发及示范应用项目入选“工信部2018年工业互联网试点示范项目”和“工信部2018年物联网集成创新与融合应用项目”“工信部2020年大数据产业发展试点示范项目”等。2020年6月发布橡胶行业全球首个落地的工业互联网平台——橡链云平台,并于10月份在第二届中国工业互联网大赛北区决赛上荣获一等奖。

    橙色云设计有限公司总经理 赵迎芳

    在赵迎芳带领下,橙色云自2015年成立起获得30余项荣誉,其中,2019年公司被山东省大数据局列入2019年度省级成长型数字经济园区(试点),2020年园区升级为省级示范数字经济园区(试点),并与海尔卡奥斯平台联合中标工信部工业互联网创新发展工程——区域一体化工业互联网公共服务平台项目等。

    工业互联网年度创新方案

    浪潮QID平台

    QID平台(质量码平台)具备“身份证”——一物一码、“连接器”——万物互联、“采集器”——关键控制点、“存储器”——一物一档、“放大器”——增值服务等五大核心实力,提供标准、安全的数据采集、链接、分析、存储、应用和分级授权等服务。目前,浪潮分别与中国信通院、标识解析重庆顶级节点、武汉顶级节点、上海顶级节点共同建设运营基于标识解析的QID平台。企业赋能方面,QID平台已应用于装备制造、机械制造、制药、化工、服装、快消品、粮食、煤炭、造纸、农业机械等十大行业。此外,还发起成立数字万象生态合作伙伴合作计划,鼓励基于QID平台的应用创新,形成完善的“QID平台+生态”体系。

    卡奥斯供应链赋能冷链防疫的食安码-标识解析冷链追溯防疫大数据平台解决方案

    面对当下冷链运输带来的新冠病毒传播风险,卡奥斯COSMOPlat国家二级节点与有关方共建了进口冷链产品防疫追溯方案。该方案实现了标识解析在冷链追溯应用中的首先落地。食品安全码依托卡奥斯COSMOPlat工业互联平台,聚焦食品安全方向,能够为用户提供赋码、码数据存储、上链保真、查询、追溯、产品数据查询等一系列功能,实现了冷链最小销售单位的追溯。并兼容其他任何码系统,实现无缝对接。

    用友YonBIP | AIoT智能物联网平台

    YonBIP |AIoT智能物联网平台(简称AIoT平台)是用友在物联网领域发布的基础能力平台,可便捷实现OT-IT融合,让工业数据说话,驱动智能工业。AIoT平台支撑生产制造、资产管理、能源管理、安环管理、设备后服务等多个业务领域,和智能工厂、智慧园区、智慧矿山、智慧农业等多个垂直行业,全面覆盖各主流物联协议、普适各种物联需求,提供一站式解决方案。为更好地为企业提供智能物联网服务,AIoT平台提供了三大利器:IoT Cube让物联应用开发更加便捷、YonTimesDB 用友自主高性能时序数据库高效挖掘数据价值,以及软硬一体的边缘智能设备——支持5G的精智云盒。

    上海联通联擎-5G全连接工厂解决方案

    提供了从接入到应用的端到端解决方案,把来自机器设备、业务系统、产品模型、生产过程以及运行环境中大量数据汇聚到工业PaaS平台上,并将技术、知识、经验和方法以数字化模型的形式也沉淀到平台上,只需通过调用各种数字化模型与不同数据进行组合、分析、挖掘、展现,就可以快速、高效、灵活的开发出各类工业APP,提供全生命周期管理、协同研发设计、生产设备优化、产品质量检测、企业运营决策、设备预测性维护等多种多样的服务。通过建设标准通用化工业互联网“联擎-5G全连接工厂”平台,将有效解决制造业企业生产设备在设计研发、生产制造与销售运维环节的数据流、业务流、价值链协同问题,实现生产设备,产品等全生命周期的设计、制造与运维协同。

    格创东智半导体制造R2R极致品质控制解决方案

    格创东智是TCL战略孵化的工业互联网公司,目前已在芯片半导体、3C、通信以及新能源等数十个行业落地标杆案例。基于工业互联网的半导体制造R2R(批间控制)极致品质控制解决方案通过实施完整的实时闭环反馈控制来解决半导体生产过程中品质良率的核心问题。该方案已经在TCL华星(武汉)t3、t4工厂蒸镀和曝光等关键制程上线应用,明显减少生产变异,每年带来500万元经济效益。在第二届中国工业互联网大赛上,“半导体制造R2R极致品质控制解决方案”获得全国二等奖。

    百度智能云工业视觉智能平台

    百度智能云工业视觉智能平台是0代码、快速的深度学习训练方案。该平台预置多类场景化的预训练深度学习模型,可满足多场景的模型生产。目前现有的视觉检测产品其核心能力都掌握在国外公司,因此百度工业视觉智能平台打破国外视觉产品的垄断,其核心AI能力全部自研,为企业提供AI+机器视觉检测产品的能力,解决企从检测、人力、成本的困局。

    东土科技NewPre 3101 AI边缘通用控制器

    集成边缘计算、AI等技术,替代传统PLC\IPC等产品,是东土科技明星产品——NEWPRE3000 的升级版本,为智慧工业智能制造打造全能型、高性价比的边缘控制解决方案。NEWPRE 3101采用工业级设计,极具高可靠性及高灵活性;同时兼具强大性能与灵活扩充能力,搭载高效实时控制开发工具MaVIEW,整合多种工业级现场应用,实现智造生产全生命周期流程安全、可靠、高效运转。NEWPRE 3101工业服务器作为智慧工业智能制造工厂的“边缘超脑”,可减少设备数量,降低布线复杂性,真正做到“II IN ALL”,具备极高的性价比。

    工业互联网年度优秀案例

    洛阳智能农业装备研究院有限公司智能农机装备管理平台

    平台上线两年多来,各类型农机数量已突破6.6万台,累计数据15亿条,累计为政府、农机企业、农机合作社提供数据分析报告100余份。未来,随着我国土地流转等政策的实施推广,以及农业规模化、集约化发展的推进,基于工业互联网的农机智能管理不仅将具有较大的商业价值,更对我国农业转型发展具有促进作用。

    中国电建集团租赁有限公司大家机械共享服务平台

    平台以盘活中国电建存量设备为基础,肩负整合中央企业设备资源的使命,是目前国内外首个工程机械行业一体化交易的智慧金融平台。该平台有效解决行业供需信息不对称、国有企业二手设备资产沉淀严重、中小企业融资难、国内品牌设备同质化竞争严重、重大项目分包商良莠不齐、机手难以快速匹配等行业难点、痛点、热点问题。上线半年来,线上实现设备销售百余台,价值4500万余元,撮合设备租赁百余台,盘活闲置设备达到降本增效近6000万元。该平台近期荣获国务院国资委2020国有企业数字化转型典型案例。

    树根互联全球定制家居产业链平台

    中小家居企业传统的系统集成和软件定制方式解决单点问题的模式,很难实现与外部平台的顺畅对接,如何实现产业集群的整体升级,是需要破解的难题。基于树根互联根云(ROOTCLOUD)平台打造的全球定制家居产业链平台,帮助中小家居企业应对市场定制化需求,支撑低成本高效率的小规模定制,实现以销定产、产能及时响应的个性化需求。该平台打通产业链,以数据驱动上下游协作,实现规模化产业分工。平台自2019年启动,目前已有广州、佛山等地超过20家企业接入,综合效益显著,解决了企业网络化、数字化及智能化相对薄弱的问题,为企业提供前后端一体化信息化服务平台,帮助企业提高生产效率,降低生产运营成本的同时,还将帮助企业拓展市场,提升竞争力,并进一步实现商业模式的变革。

    太极股份&华电福建-基于工业大数据的风电机组性能评估项目

    本项目采用大数据分析手段和机组设备部件机理特性相结合的方法,建立风电机组特性分析系统。通过本项目成果可以帮助用户了解机组运行的真实情况,指导用户优化机组运行参数,使机组运行在高效平稳的状态,进而提升风电场发电量。同时用户可以随时随地监控风机的运行状态,调取数据,诊断故障,减少日常值守的人员数量,大幅提高运营效率。经过论证,本项目研究成果具有较高的应用价值,在风力发电行业具有良好的可推广性。

    中煤陕西公司基于智能传感设备和大数据分析的煤气化装置智能化巡检项目

    项目以提升装置安、稳、长、满、优运行为目标,利用智能化手段集成生产监测和运行数据,通过部署先进传感器及边缘计算单元,全方位感知、预警装置的运行,代替传统人工现场巡检。系统上线后,设备设施得到了全时全方位监测与管控,使得设备管理能力得到了大幅提升;同时减少了人工巡检频次,降低了员工劳动强度,取得了较好的综合效益。装置智能化巡检的全面推进,改变了传统人工现场巡检模式,降低人员安全风险、装置安全隐患,对行业数字化转型发展极具示范作用和推广价值。

    云镝智慧&余姚智能家电云平台

    浙江余姚有“中国家电制造业基地”之称,小家电产业是余姚市最大的传统支柱产业,但产业集群存在着企业规模与实力整体偏弱、技术创新和运营管理能力亟待提高、产能供需矛盾突出等痛点。为此,余姚市携手云镝智慧,打造小家电行业的“5G+工业互联网”应用创新服务平台,从产业链层出发,打通各企业端生产、经营、管理等全价值链,优化整个集群产业资源配置,加强企业间协作分工效率,加速孵化本土品牌。目前已有232家企业上云上平台,连接供应商90家,连接设备484台;平台连接ERP模型206种,支持设备协议189种,搭载涵盖财务、HR、OA、ERP、MES等各类应用90个,助力企业实现降本、提质、增效。

    德仕能源科技集团“互联网+油服”全球油服中心项目

    德仕能源科技集团是目前国内外仅有的拥有核心技术并且具有老油田增产改造综合能力的企业。“互联网+油服”全球油服中心项目通过大数据、人工智能技术与油田增产服务的有机融合,建立全面感知、自动控制、智能预测、优化决策的油田增产服务生产体系,有效解决油田增产服务过程中存在的各类瓶颈及难题,在提高油田采收率、增储上产、降本增效等方面发挥积极作用。

    数字化转型年度创新方案

    用友商业创新平台YonBIP

    用友商业创新平台YonBIP 基于最新的大数据、人工智能等数智化技术,采用云原生(含微服务)、元数据驱动、中台化、数用分离等新一代技术架构,构建技术平台、业务中台、数据中台、智能中台,聚焦营销、采购、制造、供应链、金融、财务、人力、协同等八大核心领域,全面支撑企业运营管理与产业价值链协同,赋能企业商业创新。YonBIP不是一条产品线,而是同时面向不同类型企业的一个服务群/服务矩阵,能帮助大型企业建设产业互联网平台,推进成长型企业的数智化发展,帮助小微企业低成本上云,将云服务普及化。同时,YonBIP不只是简单的工具型商业操作系统,而是生态化的服务平台,是集工具、能力和资源于一体的多元服务体。

    销售易双中台型CRM

    销售易(Neocrm)是融合新型互联网技术的企业级CRM开创者。2020年,销售易推出的搭载to B+to C双轮驱动“双中台型CRM”,借助“业务中台”和“数据中台”组合,为全行业企业提供全触点的客户连接,以及从引流获客、销售转化、售后服务到忠诚度管理的360度客户旅程数字化支持。随着销售易业务中台的功能从to B到to C的逐步构建完善和成熟,加之数据中台在驱动业务智能闭环上的不断积累,未来双中台型CRM将成为支撑企业向数字化转型的核心工具,形成“以客户为中心”的精益化运营,为企业提质增效提供原动力和价值增益。

    中国网安炼化行业工控安全商用密码应用系统

    工业控制网络的网络安全防护已经越来越重要。中国网安在某石化下属各厂工控系统进行安全防护升级改造中,通过现场调研、需求分析、技术攻关、现场试用等一系列工作,完成了基于商密的工控系统安全产品研制,突破了基于商用密码在石化行业控制系统安全中的应用。实现了商用密码在石化工控系统中的轻量级应用,突破了基于密码应用的安全防护技术,研制了商密终端安全系统、商密工业防火墙、商密VPN,并搭建了数字证书认证系统作为密码基础设施,完善了该石化密码保障体系。项目成功在该石化总部及其他分厂开展了试点示范工作,实现了石化行业工控网络身份认证、安全传输、数据加密存储等关键技术的商用密码应用。所有研发基于典型石化行业工控特性,产品具备良好的石化行业安全防护部署适应性,行业推广性极强。

    绎云科技分布式云化企业内网—信域安全云网解决方案

    绎云科技基于零信任安全理念,采用叠加虚拟化网络(Overlay Network)技术,为客户在物理网络之上构建专有的平行安全网络,在不影响业务的前提下打通终端与业务的可信连接。该技术可大幅降低网络复杂度,优化安全运营效率,帮助企业在数字化转型过程中以最小代价实现安全架构升级。信域安全云网作为新一代安全网络产品,融合了零信任以及SD-WAN的overlay能力,踏准了网络与安全迭代的新周期,赋能企业在远程大规模办公场景下分布式云服务的需求。

    数字化转型年度优秀案例

    太极股份边缘计算系统在电网供应链中的应用

    数据采集与边缘计算网关是国网电工装备智慧物联项目的重要组成部分。由于电工装备制造供应商数量众多,生产数据复杂多样,如何对工厂的数据进行标准的、高效的、准确的采集与处理,是实现智慧供应链数字化、智能化管理决策的关键。本案例中,通过本系统的设计与实施,实现了边缘计算技术体系在电工装备供应链数字化转型的应用,涵盖了协议解析、数据存储及处理、设备信息建模、边缘计算、设备管理、安全防护等功能模块。项目实现了对供应商生产、检测及试验设备信息全程实时采集,并依据设定的参数阈值对制造过程自动监控及预警,打造“透明工厂”。预计每年可减少大量的供应商的资质业绩核实、驻厂监造、见证的成本支出,为后续大数据与智能化决策奠定基础。

    杉数科技助力六国化工产销协同数智化升级项目

    六国化工是国家重点发展的大型磷复肥生产骨干企业。杉数科技则专注于人工智能决策优化。依托杉数数弈工业智能决策解决方案平台,杉数科技为六国化工打造了一套降本增效的产销协同智能决策系统。通过该项目的实施,六国化工实现了产销协同数智化升级,将线下协调转换为线上数据共享,打通营销、生产、工贸、企管等部门信息,大幅提升了部门间协同效率;同时供应链管理能力得到精细化升级,使企业生产经营计划更贴近市场,显著降低了生产、仓储、运输成本,最终达到提高产销协同水平、提高市场响应速度、提升精细化管理能力的目的。

    通威股份有限公司生产驾驶舱项目

    目前饲料工厂面对产品库存高,无法按期交付产品,产品生产成本核算不准确,导致无法充分参与市场竞争;无生产过程实时数据,无法分析设备工作情况,手工统计麻烦,分析不直观,改善着力点不聚焦,效率、性能数据模糊等一些列问题,造成无法客观评价供应商和员工。生产驾驶舱项目的目标是深入开展精细化工作,实现降本增效,使公司战略和目标分解细化,真正落实到每个环节并发挥作用,提升企业整体执行力。该项目从2019年下半年启动,经历了1.0版本方案确定、程序开发、试点公司实施等阶段。目前正在各个分子公司推广中。

    数字化转型卓越成就企业

    万达集团股份有限公司

    中国万达集团已发展成为涵盖港口物流、石化橡胶、国际贸易等产业于一体的国际化大型企业集团。集团在发展过程中始终高度重视信息化、智能化、数字化建设,目前已建成了覆盖全业务领域、贯穿各经营管理层级、打通核心产业链上下游的信息化软硬件管控平台,并孵化出“山东创恩信息科技股份有限公司”这一具备强大服务能力、丰富软硬件产品和完善产业信息化解决方案的信息科技企业,为众多制造业提供了以万达制造业经验为基础、以创恩公司信息技术能力为载体的产业升级生产性服务,形成了服务型制造的典型模式。

    通威股份有限公司

    通威股份有限公司由通威集团控股,是以农业、新能源双主业为核心的大型民营科技型上市公司。通威信息化建设主要经历了以提高工作效率为主de1信息化1.0阶段,以跨地域协同、支撑业务运营的信息化2.0阶段,支撑“新能源+农业”双产业协同发展战略的信息化3.0阶段。2018年起,通威开始进入数字化转型时代,通过构建数字化创新平台、强化体系标准化管理等方式深化数字化转型。长期以来,通威数字化以卓越运营为目标,依托信息化技术,实现全国及海外地区200余家分、子公司的全业务覆盖,并以数据为驱动,构建业务从感知、决策、执行到优化的管理闭环,由此形成持续高效运营的管理模式。

    赛轮集团股份有限公司

    自2015年开始推进工业互联网应用建设,2019年与中国电信共建5G+AI工业互联网实验室,推动橡胶轮胎行业与新一代信息技术方面的融合与应用。针对传统轮胎行业存在制造工艺复杂、上下游资源信息缺乏互通、数字化转型困难、迭代创新门槛高等痛点,赛轮联合橡胶行业智能制造领军企业软控股份,以及青岛科技大学、中国电信、阿里达摩院等合作伙伴,于2020年6月11日发布赛轮集团“橡链云”平台,助力橡胶产业链实现全局资源最优配置和制造模式创新。从第一代控制系统升级到第2代管控网络系统、第3代轮胎企业操作系统到现在打造轮胎工业互联网平台,赛轮集团是中国率先实现生产智能化控制的轮胎企业。

    广州汽车集团股份有限公司汽车工程研究院

    广汽集团已明确将数字化转型提升为集团发展战略,积极推动集团数字化转型,并在汽车营销、汽车研发、供应链管理、管控等领域数字化转型成效显著。广汽研究院过去三年来重点打造了以“信息化、数字化、在线化、互联化、智能化”为目标的数字化研发平台,是集团数字化转型在研发领域的具体场景落地。该平台在协同模式、技术创新、软件开发等方面取得了显著成效。平台建设成果和应用已达到了国内汽车企业领先水平,部分达到了国际先进水平。目前,该课题项目不但在研究院得到了广泛应用,助推了研究院业务的快速发展,还被推广到集团下属主机厂、零部件等企业。同时,平台已在较多汽车主机厂进行了多轮介绍。

    洛阳智能农业装备研究院有限公司

    洛阳智能农业装备研究院有限公司暨国家农机装备创新中心是我国农机行业首家国家级制造业创新中心。2020年,中心上线农机装备模拟仿真平台。目前,公司正在建设农机装备全生命周期模拟仿真工作站,借助云端资源为全行业提供一站式模拟仿真服务,进一步加速智能化农业作业装备的设计与开发。创新中心未来的目标,是打造农机领域原创科技的策源中心、行业技术进步的促进中心,助力我国农机装备高质量发展。通过多个项目的建设,中心实现了产品研制、企业管理、产业链协同等方面的数字化转型升级,对我国农机装备行业产生了一定的影响和带动作用。

    数字化转型杰出贡献人物

    浪潮区块链技术研究院首席架构师 王伟兵

    国内知名区块链技术专家,浪潮区块链技术研究院首席架构师、浪潮质量码(QID)CTO、山东省区块链与新技术融合重点实验室学术带头人。2017年以来,专注于区块链研究和实践,将超级账本、以太坊等区块链技术综合运用于供应链协同、数据共享与安全、资产与通证、工业互联网标识解析、物联网等领域。在区块链+工业互联网领域,开创性将“区块链+标识解析+SM9标识密码”技术融合创新,推出工业区块链平台,形成区块链+工业互联网的“链网协同”融合方案,对国内工业互联网发展做出了积极贡献。

    通威股份有限公司信息总监 周勇

    负责集团信息系统规划、实施工作,领导IT部门转型,组织领导大型信息化项目建设实施。周勇结合通威未来战略规划,为实现公司规模倍增、业务模式转型、战略管控落地,适应新技术发展的挑战,完成新的IT规划,按灵活适应、快速复制、横向集成、纵向管理、有效集成、全面支撑的需求,从IT应用蓝图、基础设施架构、IT治理三方面对未来IT建设及发展的目标、内容进行了规划,并制定了具体的实施计划方案,领导公司IT转型,构建灵活适应、快速复制、横向协同、纵向管控、有效集成、全面支撑的信息化应用系统,打造一支高效精干的信息化队伍,完善信息化管理体系,使通威未来的信息化应用达到国内领先水平,支撑通威业务发展与管理创新。目前正按规划开展相关的项目建设及IT转型工作,已完成的ERP等项目成为行业标杆。

    成都中电熊猫显示科技有限公司CIO 仇善海

    带领团队打造了包括企业资源计划、大数据分析平台等在内的一整套智能化信息系统。项目建成后不断精益求精,通过精细化目标管理以及运维体系建设,实现了各生产经营系统稼动率达到了99.99%的目标。建设成果多次受到国家及地方领导肯定,被评为两化融合、工业互联网、智能制造等多个试点示范项目。通过工业互联网的应用,依托大数据分析,突破生产节拍的瓶颈,生产效率持续提升。工业互联网技术为成都熊猫显示在动力成本和运行成本这两方面一年节省了8000万元的运营成本。

    数字化转型优秀团队/CIO

    中国万达集团流程与信息化管理部(创恩信息)

    团队核心成员来自IBM、德勤、中石油、德国大众、华为、亚信等国内外知名公司,主持或参与过多项国内知名大型信息化建设项目。几年来,已助力中国万达集团总部、天弘化学、万达宝通、耐斯特炭黑和热电、新能源、资金、财务等专业公司和业务板块建设上线信息系统60余项,是万达集团产业数字化之路的有力奠基石。在数字化产业实践中,团队获得了陕西延长石油、八亿橡胶等客户信任,从数字化转型、智能制造规划建设到工业互联网平台等方面赋能企业;同时带动众多企业提高信息化建设意识,加快了行业和区域智能化建设进程。创恩信息有“服务+平台”两种商业模式:提供针对具体行业和业务领域的智能化、信息化咨询规划及实施开发等服务;提供石化行业及橡胶行业垂直行业云平台,具备采购、生产、销售、物流、金融全价值链增值服务能力,赋能行业生态伙伴。

    中国电建集团租赁有限公司大家机械共享服务平台主创团队

    大家机械共享服务平台,从无到有,平台负责人带团队从最初的理念设计到市场调研、产品分析,从产品规划到系统开发,都是团队一手孵化。作为国内外首个行业在线交易一体化的智慧金融平台,不仅帮助中央企业整合资源、降本增效,帮助企业培育优秀的分包商队伍,并多维度的打造了中央企业生态圈,拓展了央企系的产业链业务。有效解决了建筑、工程机械行业里的难点、痛点等问题,在行业有极高的口碑和信任度,推动了行业高质量发展。

    洛阳智能农业装备研究院有限公司总经理助理兼技术研发中心主任 王鹏 博士

    2017年,王鹏博士带领团队进行智能农机装备管理平台的建设、实施、开发与上线。2019年,作为农机装备模拟仿真平台项目的项目总监,领导并组织了项目的建设、实施、开发与上线,实现了公司产品研制的数字化应用。通过对项目逐步投入使用开发,逐步打破农机装备创新过程的信息孤岛现象,实现了产品的正向研制与创新设计,提升了农机装备创新设计效率与质量和驱动智能装备大数据服务新模式。王鹏博士参与的智能工业物端体系构建及示范应用项目,所建设智能农业物端体系面向智慧大田,从智能传感器、智能装备及智慧农业系统三个方面实现突破。

    成都沃尔沃汽车数字化总监 董斌

    近10年来,董斌带领团队,先后实施了沃尔沃汽车成都工厂IT Infra(网络、机房、服务器)项目、沃尔沃汽车成都工厂应用系统(MES、SCM、Quality)项目、跨工厂(大庆工厂、路桥工厂、美国查尔斯顿工厂、成都北极星工厂)系统实施及上线支持,以及制造领域全球外包服务落地中国、敏捷变革(Agile transformation)落地中国等项目,探索了一条国际智能制造管理系统落地中国并进行全球输出的成功之道。

    智能制造卓越成就企业

    中煤陕西榆林能源化工有限公司

    中国中煤能源股份有限公司的全资子公司,主要负责中煤集团在陕西省煤炭、煤化工、电力、铁路等项目的投资筹建和生产经营工作。公司数字化转型成绩突出,2016年,被工信部列为智能制造试点示范企业(煤化工智能工厂),是第一家入选的煤化工企业;2017年,入选中国煤炭工业协会煤炭工业两化深度融合示范项目;2019年,企业智能煤化工工厂入选国资委首批中央企业智能现场模型。“十三五”期间已经初步建成了覆盖公司经营决策层、化工生产管理层、操作层的较为全面的信息化应用系统,信息化、智能化建设和应用水平处于行业领先地位。中煤陕西公司坚持“系统化思维”,把智能化建设作为推动企业高质量发展的重要方案,在2020年3月成立了数字化转型办公室,6月成立了煤化工研究所,积极编制“十四五”数字转型工作方案。

    成都中电熊猫显示科技有限公司

    成都中电熊猫显示科技有限公司(以下简称“成都熊猫”)主要从事大尺寸、高分辨率新型显示面板的研发与生产。从建厂至今公司已经打造了包括企业资源计划、计算机整合制造、品质管理、自动仓储管理、动力能源管理、云桌面、企业数据仓库、智慧运管平台、人员管理、人员定位管理及大数据分析平台等一整套智能化信息系统。通过智能工厂建设,公司实现了以大数据处理中心为核心,整合产业、资金、人才、知识等核心资源信息,通过大数据技术进行分析与挖掘,实现企业的高效运营,提高全员科学管理与规范工作意识,增强核心竞争力,为企业的战略决策提供强有力支持,从而实现企业的品牌化和可持续发展。

    智能制造年度优秀案例

    赛轮集团高性能轮胎智能制造集成创新试点项目

    项目在原有ERP、SRM、MES等核心系统基础上,构建企业级工业互联网平台,规范数据标准,全面贯通企业研发、制造、营销、服务等环节的信息采集与共享,加强企业大数据的挖掘分析,优化关键环节的流程,深度利用人工智能技术提升关键节点的效率,建设以数据和AI驱动的全生命周期轮胎智能智造体系。2020年12月,项目成功上线,成效显著,形成面向橡胶轮胎企业的智能制造应用新模式,为橡胶轮胎行业转型升级起到良好的示范带动作用。一是生产效率提高;二是生产升本下降;三是信息安全防护提升;四是运营成本降低;五是产品不良率降低。

    中国万达集团基于智能数字孪生的石化智能制造项目

    项目实施主体为中国万达集团所属天弘化学公司。项目由ERP、MES、LIMS、HSE、设备管理系统、数字工厂项目、大数据平台7个子项目构成。于2015年3月启动,2019年12月上线。本项目结合工业物联网和多维度、多属性、多应用的仿真模拟技术,分别从外在表现形式和内在驱动机制,全面实现了工厂信息世界和真实的物理世界之间深度融合。构建成完整的信息物理融合系统,实现了人员、产品、设备、环境的互联;能够对风险进行预警,并对过程或未知环境进行自主学习,持续改善系统性能。

    中嘉汽车制造(成都)有限公司(成都沃尔沃汽车)

    VOLVO汽车成都工厂信息系统与工厂规划同步进行,实施和工厂建设同步,在车辆的试制阶段即全部上线运行,保证了第一个VOLVO汽车品牌产品S60L在中国的投产。信息系统的实施,使VOLVO成都工厂完全达到欧洲工厂的智能化生产水平。VOLVO汽车成都工厂制造管理系统架构及系统的成功实施,成为了VOLVO汽车全球新建工厂的标准模板。VOLVO汽车后续建立的大庆工厂、路桥工厂及美国查尔斯顿工厂都是按照此模板进行导入和实施。

    国能榆林化工有限公司

    国家能源集团的智慧化工建设已开始稳步推进,MES、设备管理、项目管理、安全管理等系统模块已开始建设,设备管理和项目管理模块计划于2021年上线,其它系统模块计划于2022年全部完成建设。榆林化工将于2021年完成转动设备状态检测及预知维修系统、管道和容器壁厚减薄在线智能检测系统、大区域气体泄漏红外成像检测系统、智能仓储系统等的建设。通过智能工厂建设步伐的加快,榆林化工将很快从传统煤化工企业中脱颖而出,进入到国内一流现代煤化工标杆企业之列。

    青岛海湾化学有限公司

    公司是青岛海湾集团旗下骨干企业,国家重点氯碱企业、青岛百强企业、中国化工500强企业。公司不断推进信息化建设,发展智能制造。建立了一体化生产调度平台,通过DCS系统、SIS系统等,实现连续性生产智能化。在海湾集团“一体化”战略部署下,建立了企业资源管理系统(ERP)。2020年,公司实行数据库建设,利用大数据开展生产分析,研判生产趋势,消除设备及事故隐患。公司自主研发的智能巡检系统使全公司 2000 多个巡检点实现线上管理,为生产运行提供了保障。

    陕西未来能源化工有限公司

    公司是山东能源集团有限公司控股的大型能源化工企业。未来能源信息化建设坚持引进国际先进的管理理念,充分借鉴行业最佳实践经验,依托国内一流的信息化服务体系,遵照原兖矿集团信息化项目“六统一”的建设原则进行。近年来,公司在煤化工项目和煤矿运营中不断提升自动化、智能化水平,尤其在智能应急管理指挥等方面进行了大量探索与实践。2019年1月~2020年12月,公司基于“数据+平台+应用”的新模式,建立基于互联网+、大数据技术的安全应急管理平台,通过对突发事故的预防、监测预警、应急响应和恢复重建这几个过程的管理,建立必要的组织机构和技术措施,使应急管理和响应决策化、科学化,使应急管理和应急救援工作准确、快捷和高效。

    东营大海科林光电有限公司

    公司主要从事太阳能电池组件的研发、生产和销售,是工信部首批109家《光伏制造行业规范条件》入围企业之一。公司基于智能化数字化生产设备及自动化设备,实现光伏组件的自动化、智能化生产,质量可控、可追溯,工作效率高。公司信息化数字化坚持从实际出发,避免盲目建设,同时又着眼长远,考虑技术应用的前瞻性,为未来发展留有余地和空间。

    年度智慧园区

    东营港经济开发区

    东营港经济开发区连续7年入选“中国化工园区30强”,2019年列全国第8位。近年来,开发区投资3.8亿元,建设全国首个“5G+”智慧化工园区,以华为、中国移动、大恒为实施主体,分三期建设。2020年12月,智慧园区平台正式投入使用。东营港智慧园区全场景引入人工智能和大数据分析技术,搭建起了消防应急、交通物流、综合服务一体化智慧平台,以智慧化的园区管理,筑牢安全生产“生命线”。实现了危险源实时监控。作为全国首家对装置、罐区重大危险源实现智能监控的化工园区,开发区突破5G+危险源数据无线化实时采集技术,利用5G智能传感器对重大危险源关键数据进行实时采集、趋势分析和风险预警;安全生产视频巡查,违规作业动态监管。

    年度发展潜力园区

    中关村工业互联网产业园

    由石景山区政府和中关村发展集团联合共建,以打造国内一流、世界领先的工业互联网集聚中心为目标。园区在空间上将形成“先导区-核心区-拓展区”格局,形成“近期-中期-远期”的运营时序,在产业上形成以工业软件、工业互联网平台企业、围绕5G和工控安全技术为核心的技术研发企业、新一代信息技术等工业互联网产业聚集区。依托中关村软件园丰富的产业资源和已形成的产业园区运营服务模式,中关村工业互联网产业园通过聚集创新项目、搭建服务体系、发挥引领作用、打造区域品牌四大举措,引入一批工业互联网国内外龙头企业、导入一批工业互联网产业平台型企业、集聚一批工业互联网产业创新型企业、孵化一批先进性的科技成果转化项目、汇聚一批科研机构、联盟协会和服务组织,打造工业互联网产业集群区和创新风向标。

    新闻/投稿热线:13662444857(微信同号)


    我叫“5G产业圈”

    聚焦5G应用产业生态的头部媒体

    长按扫码关注

    最新5G资讯都在这里!

    展开全文
  • 数字图像处理:4.色彩空间转换

    千次阅读 2013-07-30 20:46:31
    而颜色可以由不同的角度,用三个一组的不同属性加以描述,就产生了不同的颜色空间。但被描述的颜色对象本身是客观的,不同颜色空间只是从不同的角度去衡量同一个对象。 颜色空间按照基本结构可以两大类:基色颜色...

    颜色通常用三个相对独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间。而颜色可以由不同的角度,用三个一组的不同属性加以描述,就产生了不同的颜色空间。但被描述的颜色对象本身是客观的,不同颜色空间只是从不同的角度去衡量同一个对象。

    颜色空间按照基本结构可以分两大类:基色颜色空间和色、亮分离颜色空间。前者的典型是 RGB,还包括 CMY、CMYK、CIE XYZ 等;后者包括 YCC/YUV、Lab、以及一批“色相类颜色空间”。CIE XYZ 是定义一切颜色空间的基准,很奇妙的是,它即属于基色颜色空间,也属于色、亮分离颜色空间,是贯穿两者的枢纽。色、亮分离颜色空间中的子类型“色相类颜色空间”,是把颜色分成一个表亮属性,和两个表色属性,其中有一个表色属性是色相,而色相以外的两个属性可以选用不同的变量来定义,而色相的概念不变,因此就构成一族共同使用色相属性,另加表亮属性和表色属性各一个组成的颜色空间,它们是颜色空间中的一个家族,暂且统称为 HSB 颜色空间。

    RGB颜色空间是一种大的分类,具体而言RGB空间还包含多种空间,其中sRGB是HP和Microsoft联合制定的标准RGB空间,除此之外还有Adobe RGB,Apple RGB,ColorMatch RGB等等,他们通过不同的方式表示RGB三种颜色,使得它们具有不同的色彩宽度,GAMMA值也是不一样的(看下一篇文章),具体这几种RGB的不同,我会在另外的文章中描述。

    例如,对Lab模式是这样描述的:

    RGB模式是一种发光屏幕的加色模式,CMYK模式是一种颜色反光的印刷减色模式。而Lab模式既不依赖光线,也不依赖于颜料,它是CIE组织确定的一个理论上包括了人眼可以看见的所有色彩的色彩模式。Lab模式弥补了RGB和CMYK两种色彩模式的不足。
      Lab模式由三个通道组成,但不是R、G、B通道。它的一个通道是亮度,即L。另外两个是色彩通道,用A和B来表示。A通道包括的颜色是从深绿色(底亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);B通道则是从亮蓝色(底亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种色彩混合后将产生明亮的色彩。
      Lab模式所定义的色彩最多,且与光线及设备无关并且处理速度与RGB模式同样快,比CMYK模式快很多。因此,可以放心大胆的在图象编辑中使用Lab模式。而且,Lab模式在转换成CMYK模式时色彩没有丢失或被替换。因此,最佳避免色彩损失的方法是:应用Lab模式编辑图象,再转换为CMYK模式打印输出。
      当你将RGB模式转换成CMYK模式时,Photoshop将自动将RGB模式转换为Lab模式,再转换为CMYK模式。
      在表达色彩范围上,处于第一位的是Lab模式,第二位的是RGB模式,第三位是CMYK模式。
      Lab模式的好处在于它弥补了前面两种色彩模式的不足。RGB在蓝色与绿色之间的过渡色太多,绿色与红色之间的过渡色又太少,CMYK模式在编辑处理图片的过程中损失的色彩则更多,而Lab模式在这些方面都有所补偿。
      Lab模式与RGB模式相似,色彩的混合将产生更亮的色彩。只有亮度通道的值才影响色彩的明暗变化。可以将Lab模式看作是两个通道的RGB模式加一个亮度通道的模式。
      Lab模式是与设备无关的,可以用这一模式编辑处理任何一个图片(包括灰图图片),并且与RGB模式同样快,比CMYK模式则快好几倍。Lab模式可以保证在进行色彩模式转换时CMYK范围内的色彩没有损失。
      如果将RGB模式图片转换成CMYK模式时,在操作步骤上应加上一个中间步骤,即先转换成Lab模式。在非彩色报纸的排版过程中,应用Lab模式将图片转换成灰度图是经常用到的。

    下面是各种颜色空间的简单介绍:

    1. HSV颜色空间
      HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1. 它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于 角度0° ,绿色对应于角度120°,蓝色对应于角度240°。在HSV颜色模型中,每一种颜色和它的补色相差180° 。 饱和度S取值从0到1,所以圆锥顶面的半径为1。HSV颜色模型所代表的颜色域是CIE色度图的一个子集,这个 模型中饱和度为百分之百的颜色,其纯度一般小于百分之百。在圆锥的顶点(即原点)处,V=0,H和S无定义, 代表黑色。圆锥的顶面中心处S=0,V=1,H无定义,代表白色。从该点到原点代表亮度渐暗的灰色,即具有不同 灰度的灰色。对于这些点,S=0,H的值无定义。可以说,HSV模型中的V轴对应于RGB颜色空间中的主对角线。 在圆锥顶面的圆周上的颜色,V=1,S=1,这种颜色是纯色。HSV模型对应于画家配色的方法。画家用改变色浓和 色深的方法从某种纯色获得不同色调的颜色,在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时 加入不同比例的白色,黑色即可获得各种不同的色调。
    2. CMYK颜色空间
      CMYK(cyan,magenta,yellow)颜色空间应用于印刷工业,印刷业通过青(C)、品(M)、黄(Y)三原色油墨的不同 网点面积率的叠印来表现丰富多彩的颜色和阶调,这便是三原色的CMY颜色空间。实际印刷中,一般采用青 (C)、品(M)、黄(Y)、黑(BK)四色印刷,在印刷的中间调至暗调增加黑版。当红绿蓝三原色被混合时,会产生 白色,但是当混合蓝绿色、紫红色和黄色三原色时会产生黑色。既然实际用的墨水并不会产生纯正的颜色, 黑色是包括在分开的颜色,而这模型称之为CMYK。CMYK颜色空间是和设备或者是印刷过程相关的,则工艺方法、 油墨的特性、纸张的特性等,不同的条件有不同的印刷结果。所以CMYK颜色空间称为与设备有关的表色空间。 而且,CMYK具有多值性,也就是说对同一种具有相同绝对色度的颜色,在相同的印刷过程前提下,可以用分种 CMYK数字组合来表示和印刷出来。这种特性给颜色管理带来了很多麻烦,同样也给控制带来了很多的灵活性。 在印刷过程中,必然要经过一个分色的过程,所谓分色就是将计算机中使 用的RGB颜色转换成印刷使用的CMYK 颜色。在转换过程中存在着两个复杂的问题,其一是这两个颜色空间在表现颜色的范围上不完全一样,RGB的 色域较大而CMYK则较小,因此就要进行色域压缩;其二是这两个颜色都是和具体的设备相关的,颜色本身没有 绝对性。因此就需要通过一个与设备无关的颜色空间来进行转换,即可以通过以上介绍的XYZ或LAB色空间来 进行转换。
    3. HSL颜色空间
      HSL(hue,saturation,lightness)颜色空间,这个颜色空间都是用户台式机图形程序的颜色表示, 用六角形锥体表示自己的颜色模型。
    4. HSB颜色空间
      HSB(hue,saturation,brightness)颜色空间,这个颜色空间都是用户台式机图形程序的颜色表示, 用六角形锥体表示自己的颜色模型。
    5. HSI颜色空间
      HSI色彩空间是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation或Chroma)和亮度 (Intensity或Brightness)来描述色彩。HSI色彩空间可以用一个圆锥空间模型来描述。用这种 描述HIS色彩空间的圆锥模型相当复杂,但确能把色调、亮度和色饱和度的变化情形表现得很清楚。 通常把色调和饱和度通称为色度,用来表示颜色的类别与深浅程度。由于人的视觉对亮度的敏感 程度远强于对颜色浓淡的敏感程度,为了便于色彩处理和识别,人的视觉系统经常采用HSI色彩空间, 它比RGB色彩空间更符合人的视觉特性。在图像处理和计算机视觉中大量算法都可在HSI色彩空间中 方便地使用,它们可以分开处理而且是相互独立的。因此,在HSI色彩空间可以大大简化图像分析 和处理的工作量。HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,因而它们之间存在着 转换关系。
    6. Ycc颜色空间
      柯达发明的颜色空间,由于PhotoCd在存储图像的时候要经过一种模式压缩,所以 PhotoCd采用了 Ycc颜色空间,Ycc空间将亮度作由它的主要组件,具有两个 单独的颜色通道,采用Ycc颜色空间 来保存图像,可以节约存储空间。
    7. XYZ颜色空间
      国际照明委员会(CIE)在进行了大量正常人视觉测量和统计,1931年建立了"标准色度观察者", 从而奠定了现代CIE标准色度学的定量基础。由于"标准色度观察者"用来标定光谱色时出现负 刺激值,计算不便,也不易理解,因此1931年CIE在RGB系统基础上,改用三个假想的原色X、Y、 Z建立了一个新的色度系统。将它匹配等能光谱的三刺激值,定名为"CIE1931 标准色度观察者 光谱三刺激值",简称为"CIE1931标准色度观察者"。这一系统叫做"CIE1931标准色度系统"或称为" 2° 视场XYZ色度系统"。CIEXYZ颜色空间稍加变换就可得到Yxy色彩空间,其中Y取三刺激值中Y的值, 表示亮度,x、y反映颜色的色度特性。定义如下:在色彩管理中,选择与设备无关的颜色空间是 十分重要的,与设备无关的颜色空间由国际照明委员会(CIE)制定,包括CIEXYZ和CIELAB两个标准。 它们包含了人眼所能辨别的全部颜色。而且,CIEYxy测色制的建立给定量的确定颜色创造了条件。 但是,在这一空间中,两种不同颜色之间的距离值并不能正确地反映人们色彩感觉差别的大小, 也就是说在CIEYxy色厦图中,在 不同的位置不同方向上颜色的宽容量是不同的,这就是Yxy颜色空间 的不均匀性。这一缺陷的存在,使得在Yxy及XYZ空间不能直观地评价颜色。
    8. Lab 颜色空间
      Lab颜色空间是由CIE(国际照明委员会)制定的一种色彩模式。自然界中任何一点色都可以在Lab空间 中表达出来,它的色彩空间比RGB空间还要大。另外,这种模式是以数字化方式来描述人的视觉感应, 与设备无关,所以它弥补了RGB和CMYK模式必须依赖于设备色彩特性的不足。 由于Lab的色彩空间要 比RGB模式和CMYK模式的色彩空间大。这就意味着RGB以及CMYK所能描述的色彩信息在Lab空间中都能 得以影射。Lab颜色空间取坐标Lab,其中L亮度;a的正数代表红色,负端代表绿色;b的正数代表黄色, 负端代表兰色(a,b)有L=116f(y)-16, a=500[f(x/0.982)-f(y)], b=200[f(y)-f(z/1.183 )];其中: f(x)=7.787x+0.138, x<0.008856; f(x)=(x)1/3,x>0.008856
    9. YUV颜色空间
      在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD(点耦合器件)摄像机,它把摄得的彩色图像 信号,经分色、分别放大校正得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y、B-Y, 最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这就是我们常用的YUV色彩空间。 采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量, 那么这样表示的图就是黑白灰度图。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机 的兼容问题,使黑白电视机也能接收彩色信号。根据美国国家电视制式委员会,NTSC制式的标准,当白光的 亮度用Y来表示时,它和红、绿、蓝三色光的关系可用如下式的方程描述:Y=0.3R+0.59G+0.11B 这就是常用 的亮度公式。色差U、V是由B-Y、R-Y按不同比例压缩而成的。如果要由YUV空间转化成RGB空间,只要进行 相反的逆运算即可。与YUV色彩空间类似的还有Lab色彩空间,它也是用亮度和色差来描述色彩分量,其中L为 亮度、a和b分别为各色差分量。


       FROM


    配套代码实现


    个色彩空间的之间的转换

    展开全文
  • VC数字图像处理编程讲座之

    千次阅读 2009-10-27 14:02:00
    VC数字图像处理编程讲座之 本讲座系统介绍了如何使用Visual C++对bmp、gif、jpg等常见格式图像进行处理 前 言  数字图像处理技术与理论是计算机应用的个重要领域,许多工程应用都涉及到图像处理,...


    VC数字图像处理编程讲座之一
    本讲座系统介绍了如何使用Visual C++对bmp、gif、jpg等常见格式图像进行处理
    前 言

      数字图像处理技术与理论是计算机应用的一个重要领域,许多工程应用都涉及到图像处理,一直有一个强烈的愿望,想系统的写一个关于数字图像处理的讲座,由于工作学习很忙,时至今日才得以实现。

      “图”是物体透射光或反射光的分布,“像”是人的视觉系统对图的接收在大脑中形成的印象或认识。图像是两者的结合。人类获取外界信息是靠听觉、视觉、触觉、嗅觉、味觉等,但绝大部分(约80%左右)来自视觉所接收的图像信息。图像处理就是对图像信息进行加工处理,以满足人的视觉心理和实际应用的需要。简单的说,依靠计算机对图像进行各种目的的处理我们就称之为数字图像处理。早期的数字图像处理的目的是以人为对象,为了满足人的视觉效果而改善图像的质量,处理过程中输入的是质量差的图像,输出的是质量好的图像,常用的图像处理方法有图像增强、复原等。随着计算机技术的发展,有一类图像处理是以机器为对象,处理的目的是使机器能够自动识别目标,这称之为图像的识别,因为这其中要牵涉到一些复杂的模式识别的理论,所以我们后续的讲座只讨论其中最基本的内容。由于在许多实际应用的编程中往往都要涉及到数字图像处理,涉及到其中的一些算法,这也是许多编程爱好者感兴趣的一个内容,我们这个讲座就是讨论如何利用微软的Visual C++开发工具来实现一些常用的数字图像处理算法,论述了图像处理的理论,同时给出了VC实现的源代码。本讲座主要的内容分为基础篇、中级篇和高级篇,具体包含的主要内容有:

      1. 图像文件的格式;

      2. 图像编程的基础-操作调色板;

      3. 图像数据的读取、存储和显示、如何获取图像的尺寸等;

      4. 利用图像来美化界面;

      5. 图像的基本操作:图像移动、图像旋转、图像镜像、图像的缩放、图像的剪切板操作;

      6. 图像显示的各种特技效果;

      7. 图像的基本处理:图像的二值化、图像的亮度和对比度的调整、图像的边缘增强、如何得到图像的直方图、图像直方图的修正、图像的平滑、图像的锐化等、图像的伪彩色、彩色图像转换为黑白图像、物体边缘的搜索等等;

      8. 二值图像的处理:腐蚀、膨胀、细化、距离变换等;

      9. 图像分析:直线、圆、特定物体的识别;

      10.JEPG、GIF、PCX等格式文件相关操作;

      11.图像文件格式的转换;

      12.图像的常用变换:付利叶变换、DCT变换、沃尔什变换等;

      13.AVI视频流的操作; 

      图像处理技术博大精深,不仅需要有很强的数学功底,还需要熟练掌握一门计算机语言,在当前流行的语言中,我个人觉的Visual C++这个开发平台是图像开发人员的首选工具。本讲座只是起到抛砖引玉的作用,希望和广大读者共同交流。
    VC数字图像处理编程讲座之二
    在这一讲中作者详细介绍了BMP、GIF、JPG等图像的文件格式
    第一节 图像的文件格式

      要利用计算机对数字化图像进行处理,首先要对图像的文件格式要有清楚的认识,因为我们前面说过,自然界的图像以模拟信号的形式存在,在用计算机进行处理以前,首先要数字化,比如摄像头(CCD)摄取的信号在送往计算机处理前,一般情况下要经过数模转换,这个任务常常由图像采集卡完成,它的输出一般为裸图的形式;如果用户想要生成目标图像文件,必须根据文件的格式做相应的处理。随着科技的发展,数码像机、数码摄像机已经进入寻常百姓家,我们可以利用这些设备作为图像处理系统的输入设备来为后续的图像处理提供信息源。无论是什么设备,它总是提供按一定的图像文件格式来提供信息,比较常用的有BMP格式、 JPEG格式、GIF格式等等,所以我们在进行图像处理以前,首先要对图像的格式要有清晰的认识,只有在此基础上才可以进行进一步的开发处理。
    在讲述图像文件格式前,先对图像作一个简单的分类。除了最简单的图像外,所有的图像都有颜色,而单色图像则是带有颜色的图像中比较简单的格式,它一般由黑色区域和白色区域组成,可以用一个比特表示一个像素,“1”表示黑色,“0”表示白色,当然也可以倒过来表示,这种图像称之为二值图像。我们也可以用8个比特(一个字节)表示一个像素,相当于把黑和白等分为256个级别,“0”表示为黑,“255”表示为白,该字节的数值表示相应像素值的灰度值或亮度值,数值越接近“0”,对应像素点越黑,相反,则对应像素点越白,此种图像我们一般称之为灰度图像。单色图像和灰度图像又统称为黑白图像,与之对应存在着彩色图像,这种图像要复杂一些,表示图像时,常用的图像彩色模式有RGB模式、CMYK模式和HIS模式,一般情况下我们只使用RGB模式,R对应红色,G对应绿色,B对应蓝色,它们统称为三基色,这三中色彩的不同搭配,就可以搭配成各种现实中的色彩,此时彩色图像的每一个像素都需要3个样本组成的一组数据表示,其中每个样本用于表示该像素的一个基本颜色。

      对于现存的所有的图像文件格式,我们在这里主要介绍BMP图像文件格式,并且文件里的图像数据是未压缩的,因为图像的数字化处理主要是对图像中的各个像素进行相应的处理,而未压缩的BMP图像中的像素数值正好与实际要处理的数字图像相对应,这种格式的文件最合适我们对之进行数字化处理。请读者记住,压缩过的图像是无法直接进行数字化处理的,如JPEG、GIF等格式的文件,此时首先要对图像文件解压缩,这就要涉及到一些比较复杂的压缩算法。后续章节中我们将针对特殊的文件格式如何转换为BMP格式的文件问题作专门的论述,经过转换,我们就可以利用得到的未压缩的BMP文件格式进行后续处理。对于JPEG、GIF等格式,由于涉及到压缩算法,这要求读者掌握一定的信息论方面的知识,如果展开的话,可以写一本书,限于篇幅原因,我们只作一般性的讲解,有兴趣的朋友可以参考相关书籍资料。
    一、BMP文件结构 

      1. BMP文件组成 

      BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。文件头主要包含文件的大小、文件类型、图像数据偏离文件头的长度等信息;位图信息头包含图象的尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信息。颜色信息包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板,但如果图像为真彩色,既图像的每个像素用24个比特来表示,文件中就没有这一块信息,也就不需要操作调色板。文件中的数据块表示图像的相应的像素值,需要注意的是:图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是说,在BMP文件中首先存放的是图像的最后一行像素,最后才存储图像的第一行像素,但对与同一行的像素,则是按照先左边后右边的的顺序存储的;另外一个需要读者朋友关注的细节是:文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数。 

      2. BMP文件头 

      BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其结构定义如下: 
    typedef struct tagBITMAPFILEHEADER
    {
    WORD bfType; // 位图文件的类型,必须为“BM”
    DWORD bfSize; // 位图文件的大小,以字节为单位
    WORD bfReserved1; // 位图文件保留字,必须为0
    WORD bfReserved2; // 位图文件保留字,必须为0
    DWORD bfOffBits; // 位图数据的起始位置,以相对于位图文件头的偏移量表示,以字节为单位
    } BITMAPFILEHEADER;该结构占据14个字节。

      3. 位图信息头 

      BMP位图信息头数据用于说明位图的尺寸等信息。其结构如下:
    typedef struct tagBITMAPINFOHEADER{
    DWORD biSize; // 本结构所占用字节数
    LONG biWidth; // 位图的宽度,以像素为单位
    LONG biHeight; // 位图的高度,以像素为单位
    WORD biPlanes; // 目标设备的平面数不清,必须为1
    WORD biBitCount// 每个像素所需的位数,必须是1(双色), 4(16色),8(256色)或24(真彩色)之一
    DWORD biCompression; // 位图压缩类型,必须是 0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
    DWORD biSizeImage; // 位图的大小,以字节为单位
    LONG biXPelsPerMeter; // 位图水平分辨率,每米像素数
    LONG biYPelsPerMeter; // 位图垂直分辨率,每米像素数
    DWORD biClrUsed;// 位图实际使用的颜色表中的颜色数
    DWORD biClrImportant;// 位图显示过程中重要的颜色数
    } BITMAPINFOHEADER;该结构占据40个字节。

      注意:对于BMP文件格式,在处理单色图像和真彩色图像的时候,无论图象数据多么庞大,都不对图象数据进行任何压缩处理,一般情况下,如果位图采用压缩格式,那么16色图像采用RLE4压缩算法,256色图像采用RLE8压缩算法。

      4. 颜色表 

      颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下: 
    typedef struct tagRGBQUAD {
    BYTErgbBlue;// 蓝色的亮度(值范围为0-255)
    BYTErgbGreen; // 绿色的亮度(值范围为0-255)
    BYTErgbRed; // 红色的亮度(值范围为0-255)
    BYTErgbReserved;// 保留,必须为0
    } RGBQUAD;

      颜色表中RGBQUAD结构数据的个数由BITMAPINFOHEADER 中的biBitCount项来确定,当biBitCount=1,4,8 时,分别有2,16,256个颜色表项,当biBitCount=24时,图像为真彩色,图像中每个像素的颜色用三个字节表示,分别对应R、G、B值,图像文件没有颜色表项。位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:
    typedef struct tagBITMAPINFO {
    BITMAPINFOHEADER bmiHeader; // 位图信息头
    RGBQUAD bmiColors[1]; // 颜色表
    } BITMAPINFO;

      注意:RGBQUAD数据结构中,增加了一个保留字段rgbReserved,它不代表任何颜色,必须取固定的值为“0”,同时,RGBQUAD结构中定义的颜色值中,红色、绿色和蓝色的排列顺序与一般真彩色图像文件的颜色数据排列顺序恰好相反,既:若某个位图中的一个像素点的颜色的描述为 “00,00,ff,00”,则表示该点为红色,而不是蓝色。

      5. 位图数据 

      位图数据记录了位图的每一个像素值或该对应像素的颜色表的索引值,图像记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。这种格式我们又称为Bottom_Up位图,当然与之相对的还有Up_Down形式的位图,它的记录顺序是从上到下的,对于这种形式的位图,也不存在压缩形式。位图的一个像素值所占的字节数:当 biBitCount=1时,8个像素占1个字节;当biBitCount=4时,2个像素占1个字节;当biBitCount=8时,1个像素占1个字节;当biBitCount=24时,1个像素占3个字节,此时图像为真彩色图像。当图像不是为真彩色时,图像文件中包含颜色表,位图的数据表示对应像素点在颜色表中相应的索引值,当为真彩色时,每一个像素用三个字节表示图像相应像素点彩色值,每个字节分别对应R、G、B分量的值,这时候图像文件中没有颜色表。上面我已经讲过了,Windows规定图像文件中一个扫描行所占的字节数必须是4的倍数(即以字为单位),不足的以0填充,图像文件中一个扫描行所占的字节数计算方法:
    DataSizePerLine= (biWidth* biBitCount+31)/8;// 一个扫描行所占的字节数

      位图数据的大小按下式计算(不压缩情况下):
      DataSize= DataSizePerLine* biHeight。

      上述是BMP文件格式的说明,搞清楚了以上的结构,就可以正确的操作图像文件,对它进行读或写操作了。
    二、GIF图像文件格式

      GIF图象格式的全称为Graphics Interchange Format,从这个名字可以看出,这种图像格式主要是为了通过网络传输图像而设计的。GIF文件不支持24位真彩色图像,最多只能存储256色的图像或灰度图像;GIF格式文件也无法存储CMY和HIS模型的图像数据;另外,GIF图像文件的各种数据区域一般没有固定的数据长度和存储顺序,所以为了方便程序寻找数据区,将数据区中的第一个字节作为标志符;最后需要读者注意的是GIF文件存储图像数据是有二种排列顺序:顺序排列或交叉排列。交叉排列的方式适合网络传输,这样一来允许用户在不完全掌握图像数据之前,获取当前图像的轮廓数据。

      GIF文件格式分为87和89两个版本,对于87这个版本,该文件主要是有五个部分组成,它,们是按顺序出现的:文件头块、逻辑屏幕描述块、可选择的调色板块、图像数据块、最后是标志文件结束的尾块,该块总是取固定的值3BH。其中第一和第二两个块用GIF图像文件头结构描述:
    GIFHEADER:{
    DB Signature; //该字段占六个字节,为了用于指明图像为GIF格式,前三个字符必须为“GIF”,后三字符用于指定是哪个版本,87或89。
    DW ScreenWidth;//
    DW ScreenDepth;//占两个字节,以像素为单位表示图像的宽、高
    DB GlobalFlagByte;//该字节的各个位用于调色版的描述
    DB BackGroundColor;//代表图象的背景颜色的索引
    DB AspectRatio;图像的长宽比
    }

      GIF格式中的调色板有通用调色板和局部调色板之分,因为GIF格式允许一个文件中存储多个图像,因此有这两种调色板,其中通用调色板适于文件中的所有图像,而局部调色板只适用于某一个图像。格式中的数据区域一般分为四个部分,图像数据识别区域,局部调色板数据,采用压缩算法得到的图象数据区域和结束标志区域。

      在GIF89版本中,它包含七个部分,分别是文件头、通用调色板数据、图像数据区和四个补充数据区,它们主要是用于提示程序如何处理图像的。

      三、JEPG图像文件

      JEPG简称为联合摄影专家小组,作为一种技术,主要用于数字化图像的标准编码,JPEG主要采用有损的压缩编码方式,它比GIF、BMP图像文件要复杂的多,这不是短短的几页篇幅可以将清楚的,万幸的是,我们可以通过一些别的方法将该格式转化为BMP格式。读者需要知道的是在对JEPG文件格式编码时,通常需要分为以下四步:颜色转化、DCT变换、量化、编码。

      以上介绍了一些常用的图像文件,对比较复杂的格式,如GIF和JEPG,仅仅作了极其浮浅的介绍,后文我们会和它们作进一步的接触。实际应用中,还有许多图像格式,文章中都没有提到,读者如果需要做进一步的研究,还需要参考一些关于图像格式方面的资料。
    VC数字图像处理编程讲座之三
    本节主要讲述如何操作BMP文件,如对其读、写和显示等
    BMP图像的基本操作

      上一讲我们主要介绍了图像的格式,其中重点说明了BMP文件的存储格式,同时对JEPG和GIF等常用格式作了简单的介绍。本节主要讲述如何操作BMP文件,如对其读、写和显示等。

      在实现数字图象处理的过程中,主要是通过对图像中的每一个像素点运用各种图像处理算法来达到预期的效果,所以进行图像处理的第一步,也是我们最关心的问题,是如何得到图像中每一个像素点的亮度值;为了观察和验证处理的图像效果,另一个需要解决的问题是如何将处理前后的图像正确的显示出来。我们这章内容就是解决这些问题。

      随着科技的发展,图像处理技术已经渗透到人类生活的各个领域并得到越来越多的应用,但是突出的一个矛盾是图像的格式也是越来越多,目前图像处理所涉及的主要的图像格式就有很多种,如TIF、JEMP、BMP等等,一般情况下,为了处理简单方便,进行数字图像处理所采用的都是BMP格式的图像文件(有时也称为DIB格式的图像文件),并且这种格式的文件是没有压缩的。我们通过操作这种格式的文件,可以获取正确显示图像所需的调色板信息,图像的尺寸信息,图像中各个像素点的亮度信息等等,有了这些数据,开发人员就可以对图像施加各种处理算法,进行相应的处理。如果特殊情况下需要处理其它某种格式的图像,如GIF、JEMP等格式的图象文件,可以首先将该格式转换为BMP格式,然后再进行相应的处理。这一点需要读者清楚。

      BMP格式的图像文件又可以分为许多种类,如真彩色位图、256色位图,采用RLE(游程编码)压缩格式的BMP位图等等。由于在实际的工程应用和图像算法效果验证中经常要处理的是256级并且是没有压缩的BMP灰度图像,例如通过黑白采集卡采集得到的图像就是这种格式,所以我们在整个讲座中范例所处理的文件格式都是BMP灰度图像。如果读者对这种格式的位图能够作到熟练的操作,那么对于其余形式的BMP位图的操作也不会很困难。

      BMP灰度图像作为Windows环境下主要的图像格式之一,以其格式简单,适应性强而倍受欢迎。正如我们在上一讲中介绍过的那样,这种文件格式就是每一个像素用8bit表示,显示出来的图像是黑白效果,最黑的像素的灰度(也叫作亮度)值为“0”,最白的像素的灰度值为 “255”,整个图像各个像素的灰度值随机的分布在“0”到“255”的区间中,越黑的像素,其灰度值越接近于“0”,越白(既越亮)的像素,其灰度值越接近于“255”;与此对应的是在该文件类型中的颜色表项的各个RGB分量值是相等的,并且颜色表项的数目是256个。

      在进行图像处理时,操作图像中的像素值就要得到图像阵列;经过处理后的图像的像素值需要存储起来;显示图像时要正确实现调色板、得到位图的尺寸信息等。结合这些问题,下面我们针对性的给出了操作灰度BMP图像时的部分函数实现代码及注释。
    一、 BMP位图操作

      首先我们回顾一下上讲中的重要信息:BMP位图包括位图文件头结构BITMAPFILEHEADER、位图信息头结构 BITMAPINFOHEADER、位图颜色表RGBQUAD和位图像素数据四部分。处理位图时要根据文件的这些结构得到位图文件大小、位图的宽、高、实现调色板、得到位图像素值等等。这里要注意的一点是在BMP位图中,位图的每行像素值要填充到一个四字节边界,即位图每行所占的存储长度为四字节的倍数,不足时将多余位用0填充。

      有了上述知识,可以开始编写图像处理的程序了,关于在VC的开发平台上如何开发程序的问题这里不再赘述,笔者假定读者都具有一定的VC开发经验。在开发该图像处理程序的过程中,笔者没有采用面向对象的方法,虽然面向对象的方法可以将数据封装起来,保护类中的数据不受外界的干扰,提高数据的安全性,但是这种安全性是以降低程序的执行效率为代价的,为此,我们充分利用了程序的文档视图结构,在程序中直接使用了一些API函数来操作图像。在微软的MSDN中有一个名为Diblook的例子,该例子演示了如何操作Dib位图,有兴趣的读者可以参考一下,相信一定会有所收获。

      启动Visual C++,生成一个名为Dib的多文档程序,将CDibView类的基类设为CscrollView类,这样作的目的是为了在显示位图时支持滚动条,另外在处理图像应用程序的文档类(CDibDoc.h)中声明如下宏及公有变量:
    #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)//计算图像每行象素所占的字节数目;
    HANDLE m_hDIB;//存放位图数据的句柄;
    CPalette* m_palDIB;//指向调色板Cpalette类的指针;
    CSize m_sizeDoc;//初始化视图的尺寸,该尺寸为位图的尺寸;

      最后将程序的字符串表中的字符串资源IDR_DibTYPE修改为:“/nDib/nDib/nDib Files(*.bmp;*.dib) /n.bmp/nDib.Document/nDib Document”。这样作的目的是为了在程序文件对话框中可以选择BMP或DIB格式的位图文件。

      1、 读取灰度BMP位图

      可以根据BMP位图文件的结构,操作BMP位图文件并读入图像数据,为此我们充分利用了VC的文档视图结构,重载了文挡类的OnOpenDocument()函数,这样用户就可以在自动生成程序的打开文件对话框中选择所要打开的位图文件,然后程序将自动调用该函数执行读取数据的操作。该函数的实现代码如下所示:
    BOOL CDibDoc::OnOpenDocument(LPCTSTR lpszPathName)
    {
    LOGPALETTE *pPal;//定义逻辑调色板指针;
    pPal=new LOGPALETTE;//初始化该指针;
    CFile file;
    CFileException fe;
    if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &fe))
    {//以“读”的方式打开文件;
    AfxMessageBox("图像文件打不开!");
    return FALSE;
    }
    DeleteContents();//删除文挡;
    BeginWaitCursor();
    BITMAPFILEHEADER bmfHeader;//定义位图文件头结构;
    LPBITMAPINFO lpbmi;
    DWORD dwBitsSize;
    HANDLE hDIB;
    LPSTR pDIB;//指向位图数据的指针;
    BITMAPINFOHEADER *bmhdr;//指向位图信息头结构的指针
    dwBitsSize = file.GetLength();//得到文件长度
    if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) !=sizeof(bmfHeader))
    return FALSE;//读取位图文件的文件头结构信息;
    if (bmfHeader.bfType != 0x4d42) //检查该文件是否为BMP格式的文件;
    return FALSE;
    hDIB=(HANDLE) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
    //为读取图像文件数据申请缓冲区
    if (hDIB == 0)
    {
    return FALSE;
    }
    pDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB); 
    //得到申请的缓冲区的指针;
    if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) !=
    dwBitsSize - sizeof(BITMAPFILEHEADER) )
    {
    ::GlobalUnlock((HGLOBAL)hDIB);
    hDIB=NULL;
    return FALSE;
    }//此时pDIB数据块中读取的数据包括位图头信息、位图颜色表、图像像素的灰度值;
    bmhdr=(BITMAPINFOHEADER*)pDIB;//为指向位图信息头结构的指针赋值;
    ::GlobalUnlock((HGLOBAL)hDIB);
    if ((*bmhdr).biBitCount!=8)//验证是否为8bit位图
    {
    AfxMessageBox("该文件不是灰度位图格式!");
    return FALSE;
    }
    m_hDIB=hDIB;//将内部变量数据赋于全局变量;
    //下面是记录位图的尺寸;
    m_sizeDoc.x=bmhdr->biWidth;
    m_sizeDoc.y=bmhdr->biHeight;
    //下面是根据颜色表生成调色板;
    m_palDIB=new Cpalette;
    pPal->palVersion=0x300;//填充逻辑颜色表
    pPal->palNumEntries=256;
    lpbmi=(LPBITMAPINFO)bmhdr;
    for(int i=0;i<256;i++)
    {//每个颜色表项的R、G、B值相等,并且各个值从“0”到“255”序列展开;
    Pal->palPalentry[i].peRed=lpbmi->bmiColors[i].rgbRed;
    pPal->palPalentry[i].peGreen=lpbmi->bmiColors[i].rgbGreen;
    pPal->palPalentry[i].peBlue= lpbmi->bmiColors[i].rgbBlue;;
    pPal->palPalentry[i].peFlags=0;
    }
    m_palDIB->CreatePalette(pPal);
    //根据读入的数据得到位图的宽、高、颜色表;
    if(pPal)
    delete pPal;
    EndWaitCursor();
    SetPathName(lpszPathName);//设置存储路径
    SetModifiedFlag(FALSE); // 设置文件修改标志为FALSE
    return TRUE;
    }

      上面的方法是通过CFile类对象的操作来读取位图文件的,它需要分析位图中的文件头信息,从而确定需要读取的图像长度。这种方法相对来说有些繁琐,其实还可以以一种相对简单的方法读取位图数据,首先在程序的资源中定义DIB类型资源,然后添加位图到该类型中,将图像数据以资源的形式读取出来,这时候就可以根据所获取的数据中的位图信息结构来获取、显示图像数据了。下面的函数实现了以资源形式装载图像文件数据,该函数的实现代码如下所示:
    /
    HANDLE LoadDIB(UINT uIDS, LPCSTR lpszDibType)
    {
    LPCSTR lpszDibRes =MAKEINTRESOURCE(uIDS);//根据资源标志符确定资源的名字;
    HINSTANCE hInst=AfxGetInstanceHandle();//得到应用程序的句柄;
    HRSRC hRes=::FindResource(hInst,lpszDibRes, lpszDibType);//获取资源的句柄,这里lpszDibType为资源的名字“DIB”;
    If(hRes==NULL)
    return NULL
    HGLOBAL hData=::LoadResource(hInst, hRes);//转载资源数据并返回该句柄;
    return hData;
    }

      2、 灰度位图数据的存储

      为了将图像处理后所得到的像素值保存起来,我们重载了文档类的OnSaveDocument()函数,这样用户在点击Save或SaveAs子菜单后程序自动调用该函数,实现图像数据的存储。该函数的具体实现如下:
    ///
    BOOL CDibDoc::OnSaveDocument(LPCTSTR lpszPathName)
    {
    CFile file;
    CFileException fe;
    BITMAPFILEHEADER bmfHdr; // 位图文件头结构;
    LPBITMAPINFOHEADER lpBI;//指向位图头信息结构的指针;
    DWORD dwDIBSize;;
    if (!file.Open(lpszPathName, CFile::modeCreate |CFile::modeReadWrite | CFile::shareExclusive, &fe))
    {
    AfxMessageBox("文件打不开");
    return FALSE;
    }//以读写的方式打开文件;
    BOOL bSuccess = FALSE;
    BeginWaitCursor();
    lpBI = (LPBITMAPINFOHEADER) ::GlobalLock((HGLOBAL) m_hDIB);
    if (lpBI == NULL)
    return FALSE;
    dwDIBSize = *(LPDWORD)lpBI + 256*sizeof(RGBQUAD);
    //图像的文件信息所占用的字节数;
    DWORD dwBmBitsSize;//BMP文件中位图的像素所占的字节数
    dwBmBitsSize=WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount))
    *lpBI->biHeight;// 存储时位图所有像素所占的总字节数
    dwDIBSize += dwBmBitsSize; //BMP文件除文件信息结构外的所有数据占用的总字节数;
    lpBI->biSizeImage = dwBmBitsSize; // 位图所有像素所占的总字节数
    //以下五句为文件头结构填充值
    bmfHdr.bfType =0x4d42; // 文件为"BMP"类型
    bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER);//文件总长度
    bmfHdr.bfReserved1 = 0;
    bmfHdr.bfReserved2 = 0;
    bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize
    + 256*sizeof(RGBQUAD);
    //位图数据距离文件头的偏移量;
    file.Write((LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER));//向文件中写文件头信息;
    file.WriteHuge(lpBI, dwDIBSize);
    //将位图信息(信息头结构、颜色表、像素数据)写入文件;
    ::GlobalUnlock((HGLOBAL) m_hDIB);
    EndWaitCursor();
    SetModifiedFlag(FALSE); // 将文档设为“干净”标志,表示此后文档不需要存盘提示;
    return TRUE
    }
    二、 调色板的操作

      通过上面的操作,我们已经可以获取图像中的数据了,现在的又一个问题是如何在窗口中显示出图像数据。灰度图像要正确显示,必须实现逻辑调色板和系统调色板。首先我们介绍一下逻辑调色板结构LOGPALETTE,该结构定义如下:
    typedef struct tagLOGPALETTE
    {
    WORD palVersion;//调色板的板本号,应该指定该值为0x300;
    WORD palNumEntries;//调色板中的表项数,对于灰度图像该值为256;
    PALETEENTRY palPalEntry[1];//调色板中的颜色表项,由于该表项的数目不一定,所以这里数组长度定义为1,灰度图像对应的该数组的长度为256;
    }LOGPALETTE;
    颜色表项结构PALETTEENTRY定义了调色板中的每一个颜色表项的颜色和使用方式,定义如下:
    typedef struct tagPALETTEENTRY
    {
    BYTE peRed; //R分量值;
    BYTE peGreen; //G分量值;
    BYTE peBlue; //B分量值;
    BYTE peFlags; // 该颜色被使用的方式,一般情况下设为“0”;
    }PALETTEENTRY;

      Windows系统使用调色板管理器来管理与调色板有关的操作,通常活动窗口的调色板即是当前系统调色板,所有的非活动窗口都必须按照此系统调色板来显示自己的颜色,此时调色板管理器将自动的用系统调色板中的最近似颜色来映射相应的显示颜色。如果窗口或应用程序按自己的调色板显示颜色,就必须将自己的调色板载入到系统调色板中,这种操作叫作实现调色板,实现调色板包括两个步骤,既首先将调色板选择到设备上下文中,然后在设备上下文中实现它。可以通过 CDC::SelectPalette()、CDC::RealizePalette()或相应的API函数来实现上述的两个步骤。在实现调色板的过程中,通过在主框架类中处理Windows定义的消息WM_QUERYNEWPALETTE 、WM_PALETTECHANGED及视图类中处理自定义消息WM_DOREALIZE(该消息在主框架窗口定义如下:#define WM_REALIZEPAL (WM_USER+101))来实现调色板的操作。当系统需要处理调色板的变化时,将向程序的主窗口发送WM_QUERYNEWPALETTE 、 WM_PALETTECHANGED,例如当某一窗口即将激活时,主框架窗口将收到WM_QUERYNEWPALETTE消息,通知该窗口将要收到输入焦点,给它一次机会实现其自身的逻辑调色板;当系统调色板改变后,主框架窗口将收到WM_PALETTECHANGED消息,通知其它窗口系统调色板已经改变,此时每一窗口都应该实现其逻辑调色板,重画客户区。

      由于上述的调色板变更消息是发往主框架窗口的,所以我们只能在主窗口中响应这两个消息,然后由主框架窗口通知各个视窗,使得程序激活时能自动装载自己的调色板。我们定义的用户消息WM_REALIZEPAL用于主框架窗口通知视窗它已经收到调色板变更消息,视窗应该协调其调色板。下面我们给出了各个消息的响应处理函数的具体实现代码和注释:
    //
    void CMainFrame::OnPaletteChanged(CWnd* pFocusWnd)
    {//总实现活动视的调色板
    CMDIFrameWnd::OnPaletteChanged(pFocusWnd);
    CMDIChildWnd* pMDIChildWnd = MDIGetActive();//得到活动的子窗口指针;
    if (pMDIChildWnd == NULL)
    return
    CView* pView = pMDIChildWnd->GetActiveView();//得到视图的指针;
    ASSERT(pView != NULL);
    SendMessageToDescendants(WM_DOREALIZE, (WPARAM)pView->m_hWnd);
    //通知所有子窗口系统调色板已改变
    }

    BOOL CMainFrame::OnQueryNewPalette()//提供实现系统调色板的机会
    {
    // 实现活动视的调色板
    CMDIChildWnd* pMDIChildWnd = MDIGetActive();//得到活动的子窗口指针;
    if (pMDIChildWnd == NULL)
    return FALSE;//no active MDI child frame (no new palette)
    CView* pView = pMDIChildWnd->GetActiveView();//得到活动子窗口的视图指针;
    ASSERT(pView != NULL);
    //通知活动视图实现系统调色板
    pView->SendMessage(WM_DOREALIZE, (WPARAM)pView->m_hWnd);
    return TRUE;
    }
    /
    BOOL CDibView::OnDoRealize(WPARAM wParam, LPARAM)//实现系统调色板
    {
    ASSERT(wParam != NULL);
    CDibDoc* pDoc = GetDocument();
    if (pDoc->m_hDIB == NULL)
    return FALSE// must be a new document
    CPalette* pPal = pDoc->m_palDIB;
    //调色板的颜色表数据在InitDIBData()函数中实现
    if (pPal != NULL)
    {
    CMainFrame* pAppFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;//得到程序的主框架指针;
    ASSERT_KINDOF(CMainFrame, pAppFrame);
    CClientDC appDC(pAppFrame);//获取主框架的设备上下文;
    CPalette* oldPalette = appDC.SelectPalette(pPal, ((HWND)wParam) != m_hWnd);
    //只有活动视才可以设为"FALSE",即根据活动视的调色板设为"前景"调色板;
    if (oldPalette != NULL)
    {
    UINT nColorsChanged = appDC.RealizePalette();//实现系统调色板
    if (nColorsChanged > 0)
    pDoc->UpdateAllViews(NULL);//更新视图
    appDC.SelectPalette(oldPalette, TRUE);
    //将原系统调色板置为背景调色板
    }
    else
    {
    TRACE0(“/tSelectPalette failed in”);
    }
    return TRUE
    }

      注:在调用API函数显示位图时,不要忘记设置逻辑调色板,即"背景"调色板,否则位图将无法正确显示,读者可以从后面的显示部分的实现看出我们在显示时实现了逻辑调色板。上述的处理相对来说比较繁琐复杂,可能对于初学者来说也比较难于理解,所以如果我们的程序仅仅限于处理灰度图象,可以采用另外一种相对简单的办法,即在文档类的初始化阶段定义一个灰度调色板,然后在设备上下文中实现它,这样作的好处是在度取灰度位图时可以不再考虑文件中的颜色表信息,提高了文件读取速度,笔者在开发一个基于机器视觉的项目时采用的就是这种方法,取的了比较满意的效果。首先定义一个指向逻辑颜色表结构LOGPALETTE的指针pPal,填充该指针,然后将该指针与调色板指针联系起来,该方法的具体实现如下:
    /
    CDibDoc::CDibDoc()
    {
    ……………………….
    LOGPALETTE *Pal;
    Pal=new LOGPALETTE;
    m_palDIB=new Cpalette;
    pPal->palVersion=0x300;
    pPal->palNumEntries=256;
    for(int i=0;i<256;i++)
    {//每个颜色表项的R、G、B值相等,并且各个值从“0”到“255”序列展开;
    Pal->palPalentry[i].peRed=i;
    pPal->palPalentry[i].peGreen=i;
    pPal->palPalentry[i].peBlue=i;
    pPal->palPalentry[i].peFlags=0;
    }
    m_palDIB->CreatePalette(pPal);
    …………………..
    }
    三、 图像的显示

      显示DIB位图数据可以通过设备上下文CDC对象的成员函数CDC::Bitblt()或CDC::StretchBlt()来实现,也可以通过API 函数SetDIBBitsToDevice()或StretchDIBBits()来实现,函数中具体所用到的各个参数的意义可以参考MSDN。其中 StretchDIBBits()和CDC::StretchBlt()可以将图像进行放大和缩小显示。当从文档中装入位图文件时,CDIBView类的 OnInitialUpdate函数将被调用,因此可以在该函数中实现对视图尺寸的设置,用于正确的显示位图,然后就可以在视图类的OnDraw()函数中正确的显示位图了。这两个函数的具体实现代码分别如下所示:
    /
    void CDIBView::OnInitialUpdate()
    {
    CscrollView::OnInitalUpdate();
    CDIBDoc *pDoc=GetDocument();
    If(pDoc->m_hDIB==NULL)//如果位图数据为空,设置m_sizeDoc的默认尺寸;
    pDoc->m_sizeDoc.cx=pDoc->m_sizeDoc.cy=100;
    SetScrollSizes(MM_TEXT,pDoc-> m_sizeDoc);
    }
    /
    void CDIBView::OnDraw(CDC *pDC)
    {
    BITMAPINFOHEADER *lpDIBHdr;//位图信息头结构指针;
    BYTE *lpDIBBits;//指向位图像素灰度值的指针;
    BOOL bSuccess=FALSE;
    CPalette*OldPal=NULL;//调色板指针;
    HDC hDC=pDC->GetSafeHdc();//获取当前设备上下文的句柄;
    CDIBDoc *pDoc=GetDocument();//获取活动文档的指针;
    If(pDoc->m_hDIB ==NULL)
    {//判断图像数据是否为空;
    AfxMessageBox("图像数据不能为空,请首先读取图像数据!");
    return;
    }
    lpDIBHdr=( BITMAPINFOHEADER *)GlobalLock(pDoc->m_hDIB);//得到图像的位图头信息
    lpDIBBits=lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);//获取保存图像像素值的缓冲区的指针;
    if(pDoc-> m_palDIB)
    {//如果存在调色板信息,实现逻辑调色板;
    OldPal=pDC-> SelectPalette(pDoc-> m_palDIB,TRUE);
    PDC->RealizePalette();
    }
    else
    {
    AfxMessageBox("图像的调色板数据不能为空,请首先读取调色板信息!");
    return ;
    }
    SetStretchBltMode(hDC,COLORONCOLOR);
    //显示图像
    BSuccess=StretchDIBBits(hDC,0,0,pDoc-> m_sizeDoc.cx, pDoc-> m_sizeDoc.cy,
    0, pDoc-> m_sizeDoc.cy,0, pDoc-> m_sizeDoc.cy,
    lpDIBBits,(LPBITMAPINFO)lpDIBHdr,
    DIB_RGB_COLORS,
    SRCCOPY);
    GlobalUnlock(pDoc->m_hDIB);
    If(OldPal)//恢复调色板;
    PDC->SelectPalette(OldPal,FALSE);
    retrun;
    }

      四、 小结

      在本期讲座里我们主要介绍了如何操作灰度位图,它具有较强的代表性,同时为后续的图像处理编程的学习作了必要的准备工作,经过学习,对于如何操作其它类型的BMP格式的图像文件,可以达到举一反三的作用。 

    VC数字图像处理编程讲座之四
    在这一讲中作者进一步深入讲解了图像特效的显示技术......
    BMP图像显示的特效操作

      上期讲座中我们主要讲述了BMP图像数据的存取、图像的显示和调色板的操作等内容,在上面的学习基础上,我们可以进一步深化,学习并掌握图像特效显示技术。有了这种技术,可以用来在今后的项目开发中美化我们的软件界面,提高软件的视觉效果。在如今的商业软件中,几乎每一幅图像的显示都采用了图像特效显示,例如读者比较熟悉的Windows的屏幕保护程序就采用了各种各样的图像特效显示,使人感到眼花缭乱和耳目一新。专业图像处理软件更是提供了丰富的显示方式供用户使用,可以方便的在程序中实现图像的特效显示,如PhotoShop 、Authorware等。本节主要介绍如何实现图像的浮雕、雕刻、百页窗、旋转、扫描、栅条、马赛克、和渐显渐隐显示等效果。通过这期讲座的学习,读者朋友们也可以自己动手制作拥有特效显示效果的软件了。

      图像的显示我们讲过主要有BitBlt()、SetDIBitsToDevice()和StretchDIBits()等函数。需要读者注意的是,在特效显示时,并不是每个显示函数都适宜,BitBlt()函数主要是用来显示设备无关位图(DDB),后两个函数用来显示设备无关位图(DIB)。由于我们讲座里处理的是设备无关位图,所以我们主要关心的是后两个函数的应用,其中SetDIBitsToDevice()使用起来较死板,远不如 StretchDIBits()用的灵活,并且对大多数的特效显示无能为力,所以为了实现图像的特效显示效果,需要使用StretchDIBits()函数来显示图像,具体什么原因,我想可能是微软在实现这些函数时使用的方法不同吧。这些函数如何使用,各个参数的含义,可以参考微软的MSDN。

      实现图像的特殊效果的显示的基本思路是要么是操作图像的像素,要么是对图像分块按一定的方向或次序,分阶段的显示或擦除对应的图像块。对于第二种显示的思路,其中的要点是:1.划分图像块;2.确定图像块的操作次序;3.显示或清除对应的图像块;4.在两个连续显示的图像块之间插入一个固定的延迟。其中图像块的划分决定了图像的显示方式,图像块的显示顺序决定了显示的方向和细分的依据。不同的效果决定了不同的分块方法和显示次序,我们将在后面的各种特效显示中介绍如何分块和决定次序。为了使图像的显示过程明显的表现出来,实现显示的特效,就需要在图像块的依此显示中插入固定的延迟。也许读者朋友会想到利用sleep()函数或用Settime()来实现延迟,由于Windows是个基于消息的多任务操作系统,这些方法所产生的延迟时间对于图像的显示来说是不精确的,为了实现与机器无关的更精确的时间延迟,可以采用timeGetTime()函数来产生微秒级的延迟。使用这个函数时为了编译不产生错误,要在连接设置中引入“Winmm.lib”库,并要包含头文件“Mmsystem.h”。这里我们首先给出一个延迟函数,它用来实现固定时间的延迟:
    void DelayTime(DWORD time)
    {
    DWORD BeginTime ,EndTime;
    BeginTime=timeGetTime();//得到当前的系统时间、单位为微秒;
    do
    {
    EndTime=TimeGetTime();//再次得到当前的系统时间;
    }
    while((EndTime-BeginTime) <time)//判断延迟时间是否已经结束;
    }
    一、操作位图的像素实现显示的特效

      我们首先介绍直接操作图像中的像素的灰度值来实现图像显示的特效、这里我们主要介绍如何实现图像的浮雕和雕刻效果。经常看电视的朋友们不知注意到没有,有些电视连续剧在每集片头或片尾部分都有显示一些特殊效果的图像,比如前一阵子中央一套放的《长征》和《康熙王朝》,这些特效称为"图像的浮雕效果""图像的雕刻效果",经过这些特效处理后的图像增强了观众们的视觉效果,它们看上去仿佛是使用3D技术作的,这也许就是为什么这种技术那么流行的原因吧。其实,我们完全可以用一些简单的数字图像处理算法来实现这些看似复杂高深的显示效果。下面以一个标准的Lena灰度图像为原图,给出了处理后的效果图,同时给出了VC开发平台上的部分实现源代码。

      1."浮雕"图像

      "浮雕"图象效果是指图像的前景前向凸出背景。所谓的"浮雕"概念是指标绘图像上的一个像素和它左上方的那个像素之间差值的一种处理过程,为了使图像保持一定的亮度并呈现灰色,我在处理过程中为这个差值加了一个数值为 128的常量。需要读者注意的是,当设置一个像素值的时候,它和它左上方的像素都要被用到,为了避免用到已经设置过的像素,应该从图像的右下方的像素开始处理,下面是实现的源代码:
    void CDibView::OnFDImage() //产生"浮雕"效果图函数
    {
     HANDLE data1handle;//用来存放图像数据的句柄;
     LPBITMAPINFOHEADER lpBi;//图像的信息头结构;
     CDibDoc *pDoc=GetDocument();//得到文挡指针;
     HDIB hdib;//用来存放图像数据的句柄;
     unsigned char *pData;//指向原始图像数据的指针;
     unsigned char *data;//指向处理后图像数据的指针;
     hdib=pDoc->m_hDIB;//拷贝存放已经读取的图像文件数据句柄;
     lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);//获取图像信息头
    pData=(unsigned char*)FindDIBBits((LPSTR)lpBi);
    //FindDIBBits是我定义的一个函数、根据图像的结构得到位图的灰度值数据、
    pDoc->SetModifiedFlag(TRUE);
    //设置文档修改标志为“真”、为后续的修改存盘作准备;
    data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight); //声明一个缓冲区用来暂存处理后的图像数据;
    data=(unsigned char*)GlobalLock((HGLOBAL)data1handle);//得到该缓冲区的指针;
    AfxGetApp()->BeginWaitCursor();
    int i,j,buf;
    for( i=lpBi->biHeight; i>=2; i--)//从图像右下角开始对图像的各个像素进行“浮雕”处理;
      for( j=lpBi->biWidth; j>=2; j--)
      {
    //浮雕处理
    buf=*(pData+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)-*(pData+(lpBi->biHeight-i+1)*WIDTHBYTES(lpBi->biWidth*8)+j-1)+128;
    if(buf>255) buf=255;
    if(buf<0)buf=0; *(data+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)=(BYTE)buf;
    }
    for( j=0; jbiHeight; j++)
    for( i=0; ibiWidth; i++)
    //重新写回原始图像的数据缓冲区;
    *(pData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j);    AfxGetApp()->EndWaitCursor();
    pDoc->m_hDIB =hdib//将处理过的图像数据写回pDoc中的图像缓冲区;
    GlobalUnlock((HGLOBAL)hdib);//解锁、释放缓冲区;
    GlobalUnlock((HGLOBAL)data1handle);
    GlobalFree((HGLOBAL)hdib);
    GlobalFree((HGLOBAL)data1handle);
    Invalidate(TRUE);//显示图像
    }
    2."雕刻"图像

      上面讲述了通过求一个像素和它左上方像素之间的差值并加上一个常数的方法生成"浮雕"效果的灰度图像,"雕刻"图像与之相反,它是通过取一个像素和它右下方的像素之间的差值并加上一个常数,这里我也取128,经过这样处理,就可以得到"雕刻"图像,这时候图像的前景凹陷进背景之中。同样需要读者注意的是为了避免重复使用处理过的图像像素,处理图像时要从图像的左上方的像素开始处理。实现代码如下:
    void CDibView::OnDKImage() 
    {
     // TODO: Add your command handler code here
     HANDLE data1handle;//这里的内部变量与前面的含义一致、这里不再赘述;
     LPBITMAPINFOHEADER lpBi;
     CDibDoc *pDoc=GetDocument();
     HDIB hdib;
     unsigned char *pData;
     unsigned char *data;
     hdib=pDoc->m_hDIB;//拷贝图像数据的句柄;
     lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);
     pData=(unsigned char*)FindDIBBits((LPSTR)lpBi);
     pDoc->SetModifiedFlag(TRUE);
     data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight);//申请缓冲区;
     data=(unsigned char*)GlobalLock((HGLOBAL)data1handle);//得到新的缓冲去的指针; AfxGetApp()->BeginWaitCursor();
     int i,j,buf;
     for( i=0;i<=lpBi->biHeight-2; i++)//对图像的各个像素循环进行"雕刻"处理;
      for( j=0;j<=lpBi->biWidth-2; j++)
     {
        buf=*(pData+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)-*(pData+(lpBi->biHeight-i-1)*WIDTHBYTES(lpBi->biWidth*8)+j+1)+128;//“雕刻”处理;
     if(buf>255) buf=255;
     if(buf<0)buf=0;
     *(data+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)=(BYTE)buf;
     }
     for( j=0; jbiHeight; j++)
      for( i=0; ibiWidth; i++)  //重新将处理后的图像数据写入原始的图像缓冲区内;  *(pData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j);
    pDoc->m_hDIB =hdib//将处理过的图像数据写回pDoc中的图像缓冲区;
    GlobalUnlock((HGLOBAL)hdib);//解锁、释放缓冲区;
    GlobalUnlock((HGLOBAL)data1handle);
    GlobalFree((HGLOBAL)hdib);
    GlobalFree((HGLOBAL)data1handle);
    Invalidate(TRUE);//显示图像
    }

      3.图像的旋转

      根据图像像素的位置来调节该位置的灰度可以实现许多显示的特效,例如图像的镜像、翻转等。灰度图像旋转就是根据这一个思想实现的,它是指把定义的图像绕某一点以逆时针或顺时针方向旋转一定的角度,通常是指绕图像的中心以逆时针方向旋转。首先根据旋转的角度、图像对角线的长度计算旋转后的图像的最大宽度、高度,根据旋转后图象最大的宽度、高度生成新的缓冲区,假设图像的左上角为(left, top),右下角为(right, bottom),则图像上任意点(x, y)绕其中心(xcenter, ycenter)逆时针旋转angle角度后,新的坐标位置(x1, y1)的计算公式为:
      xcenter = (width+1)/2+left;
      ycenter = (height+1)/2+top;
      x1 = (x-xcenter) cosθ - (y - ycenter) sinθ+xcenter;
      y1 = (x-xcenter) sinθ+ (y- ycenter) cosθ+ ycenter;

      与图像的镜像变换相类似,下一步就是把原图中的(x,y)处象素的灰度值读入新缓冲区的(x1,y1)点处。注意在新缓冲区中与原图没有对应的象素点的值用白色或指定的灰度代替。
    二、图像的分块显示和清除

      1. 图像的扫描显示和清除

      扫描显示图像是最基本的特效显示方法,它表现为图像一行行(或一列列)地显示出来或从屏幕上清除掉,有种大戏院种的拉幕效果。根据扫描的方向的不同,可以分为上、下、左、右、水平平分和垂直平分等六种扫描。这里以向下移动为例,分别介绍显示和清除的实现。其余的扫描效果可以依次类推。向下扫描显示的实现方法是:从图像的底部开始将图像一行一行的复制到目标区域的顶部。每复制一行后,复制的行数便要增加一行,并加上一些延迟;向下移动清除的实现方法是图像向下移动显示,并在显示区域的上部画不断增高的矩形。

      1)扫描显示的代码:
    CdibView::OnImageDownScan()
    {
    CDibDoc *pDoc=GetDocument();
    HDIB hdib;
    CClientDC pDC(this);
    hdib=pDoc->m_hDIB;//获取图像数据句柄;
    BITMAPINFOHEADER *lpDIBHdr;//位图信息头结构指针;
    BYTE *lpDIBBits;//指向位图像素灰度值的指针;
    HDC hDC=pDC.GetSafeHdc();//获取当前设备上下文的句柄;
    lpDIBHdr=( BITMAPINFOHEADER *)GlobalLock(hdib);//得到图像的位图头信息;
    lpDIBBits=(BYTE*)lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);//获取指向图像像素值;
    SetStretchBltMode(hDC,COLORONCOLOR);
    //显示图像;
    for(int i=0;i<lpDIBHdr->biHeight;i++)
    //每次循环显示图象的“0”到“i”行数据;
    SetDIBitsToDevice (hDC,0,0,lpDIBHdr->biWidth, lpDIBHdr->biHeight,
    0, 0,0, i,
    lpDIBBits,(LPBITMAPINFO)lpDIBHdr,
    DIB_RGB_COLORS
    );
    DelayTime(50);//延迟;
    }
    GlobalUnlock(hdib);
    return;
    }

      2)清除代码:
    …………………………………//由于篇幅的限制,省略了与上面的相同代码
    Cbrush brush(crWhite);//定义一个“白色”的刷子;
    Cbrush *oldbrush=pDC->SelectObject(&brush);
    for(int i=0;i < lpDIBHdr->biHeight ;i++)
    {//每次循环将目标区域中的“0”到“i”行刷成“白色”;
    pDC->Rectangle(0,0,lpDIBHdr->biWidth,lpDIBHdr->biHeight);
    DelayTime(50);
    }
    …………………………………

      2. 百页窗效果

      所谓百页窗显示效果,就如同关闭和开启百页窗一样,图像被分为一条条或一列列地分别显示或清除掉,根据显示时以行或列为单位可以将该效果分为垂直或水平两种方式。以垂直百页窗为例来说明如何实现这种特效显示。实现垂直百页窗显示时,需要将图像垂直等分为n部分由上向下扫描显示,其中每一部分包括m个条、这个n可以根据具体应用时的需要来决定、m既为图像的高度除n。扫描显示时,依照差值进行扫描显示,即第k次显示k-1、k*m-1、…k*n-1条扫描线。同样,垂直百页窗清除的实现与垂直百页窗的显示相似,不同的是将绘制位图换成画矩形而已。在下面的例子中,我将图像的分成8份。
    …………………………………
    int m=8;
    int n=lpDIBHdr->biHeight/m;//图像的高度能够整除8;
    for(int l=1;l<=m;l++)
    for(int k=0;k<n;k++)
    //每次循环依次显示图像中的k-1、k*m-1、…k*n-1行; 
    StretchDIBits (hDC,0,4*k+l-1,lpDIBHdr->biWidth,1,
    0, lpDIBHdr->biHeight-4*k-l+1,lpDIBHdr->biWidth,1,
    lpDIBBits,(LPBITMAPINFO)lpDIBHdr,
    DIB_RGB_COLORS,
    SRCCOPY);//juanlianxiaoguo

    DelayTime(50);
    }
    …………………………………
    3.栅条显示特效

      栅条特效是移动特效的复杂组合,可以分为垂直栅条和水平栅条两类。它的基本思想是将图像分为垂直或水平的的小条,奇数条向上或向左显示/清除,偶数条向下或向右显示/清除。当然也可以规定进行相反的方向显示/清除。下面的代码是实现垂直栅条的例子:
    …………………………………
    int m=8;
    for(int i=0;i<=lpDIBHdr->biHeight;i++)
    for(int j=0;j<=lpDIBHdr->biWidth;j+=m)
    {//向下显示偶数条;
    StretchDIBits (hDC,j,0,m,i,j,lpDIBHdr->biHeight-i,
    m,i,
    lpDIBBits,(LPBITMAPINFO)lpDIBHdr,
    DIB_RGB_COLORS,
    SRCCOPY);//juanlianxiaoguo
    j=j+m;
    //向上显示奇数条;
    StretchDIBits (hDC,j,lpDIBHdr->biHeight-i,m,i,j,0,
    m,i,
    lpDIBBits,(LPBITMAPINFO)lpDIBHdr,
    DIB_RGB_COLORS,
    SRCCOPY);//
    DelayTime(20);
    }…………………………………

      4.马赛克效果

      马赛克显示是指图像被分成许多的小块,它们以随机的次序显示出来,直到图像显示完毕。实现马赛克的效果主要解决的问题是如何定义显示随机序列的小方块,这个问题的解决可以在定义过小方块的基础上,用一个数组来记录各个方块的左上角的坐标的位置。显示图像过程中,产生一个随机数来挑选即将显示的小方块,显示后将该方块的位置坐标从数组中剔除。清除过程与之相仿。剔除显示过的方块的位置坐标的方法是将该数组中的最后的一个点的坐标拷贝到当前位置,然后删除数组中的最后点的坐标,经过实现发现这样处理有时显示的图像是不完整的,分析其原因是生成随机数的过程有舍入溢出误差。读者可以采用其它的办法解决这个问题,例如可以生成固定的随机数组或采用一个动态的数组来跟踪未显示的图像方块的坐标等方法。
    …………………………………
    int m,n;
    int RectSize=60;//方块的宽、高尺寸为60个像素;
    if(lpDIBHdr->biWidth%RectSize!=0)//得到图像水平方块的个数;
    m= lpDIBHdr->biWidth/RectSize+1;
    else
    m= lpDIBHdr->biWidth/RectSize;
    if(lpDIBHdr->biHeight%RectSize!=0)//得到图像垂直方块的个数;
    n= lpDIBHdr->biHeight/RectSize+1;
    else
    n=lpDIBHdr->biHeight/RectSize;
    POINT *point=new POINT[n*m];//申请一个数组用来记录各个方块的左上角的坐标;
    POINT point1;
    for(int a=0;a<m;a++)//将各个方块的左上角的坐标记录到数组中;
    for(int b=0;b<n;b++)
    {
    point1.x=a*RectSize;
    point1.y=b*RectSize;
    *(point+a*b+b)=point1;
    }
    //开始随机的显示各个小方块;
    double fMax=RAND_MAX;//定义Rand()函数的最大值;
    for(int k=m*n-1;k>=0;k--)
    {
    int c=(int)((double)(m*n)*rand()/fMax);
    int mx=point[c].x;
    int my=point[c].y;
    //显示对应的图像的小块;
    StretchDIBits (hDC,mx,my,RectSize,RectSize,
    mx,lpDIBHdr->biHeight-my,RectSize,RectSize,
    lpDIBBits,(LPBITMAPINFO)lpDIBHdr,
    DIB_RGB_COLORS,
    SRCCOPY);
    point[c].x=point[k].x;
    point[c].y=point[k].y;
    DelayTime(50);
    }
    …………………………………

      5.图像的淡入淡出效果

      图像的淡入淡出的显示效果被广泛的应用在多媒体娱乐软件中,是一种特别重要的特效显示方法。淡入就是将显示图像的目标区域由本色逐渐过度的图像中的各个像素点的颜色;淡出就是由显示的图像逐渐过度到目标区域的本色。实现图像的淡入淡出有两种办法:一是均匀的改变图像的调色板中的颜色索引值;另一种方法是改变图像像素的灰度值。第一种方法实现起来比较繁琐,第二种方法就比较简单。下面是我们采用第二种方法实现图像淡入效果的代码:
    …………………………………
    //申请一个与图像缓冲区相同大小的内存;
    hdibcopy=(HDIB)GlobalAlloc(GMEM_SHARE,lpDIBHdr->biWidth*lpDIBHdr->biHeight);
    lpbits=(BYTE*)GlobalLock(hdibcopy);
    //将缓冲区的数据初始化; 
    for(int k=0;k<lpDIBHdr->biWidth*lpDIBHdr->biHeight;k++)
    {
    *(lpbits+k)=(BYTE)255;
    }
    //显示最初的图像为“白色”
    StretchDIBits (hDC,0,0,lpDIBHdr->biWidth,lpDIBHdr->biHeight,0,0,
    lpDIBHdr->biWidth,lpDIBHdr->biHeight,
    lpbits,(LPBITMAPINFO)lpDIBHdr,
    DIB_RGB_COLORS,
    SRCCOPY);
    //布尔变量end用来标志何时淡入处理结束; 
    BOOL end=false;
    while(!end)
    int a=0;
    for(int k=0;k<lpDIBHdr->biWidth*lpDIBHdr->biHeight;k++)
    {
    //判断是否待显示的像素的灰度值已经小于原始图像对应点的灰度值,如是则计数;
    if(*(lpbits+k)<*(lpDIBBits+k))
    a++;
    else//否则对应点的灰度值继续减少;
    *(lpbits+k)-=(BYTE)10;
    }
    //显示处理后的图像数据lpbits;
    StretchDIBits (hDC,0,0,lpDIBHdr->biWidth,lpDIBHdr->biHeight,0,0,
    lpDIBHdr->biWidth,lpDIBHdr->biHeight,
    lpbits,(LPBITMAPINFO)lpDIBHdr,
    DIB_RGB_COLORS,
    SRCCOPY);
    //如果所有的点的灰度值的都小于或等于原始图像的像素点的灰度值,则认为图像的淡入处理结束。
    if(a==lpDIBHdr->biWidth*lpDIBHdr->biHeight) 
    end=true; DelayTime(50);
    …………………………………

      本文上面的内容介绍了几种图像的特殊显示效果,代码在Windows2000和Visual C++6.0编程环境下编译通过,运行正常,处理达到了预期的效果。读者可以将上面介绍的显示图像的函数和处理思路结合起来,实现更多效果。 
    VC数字图像处理编程讲座之五
    本期讲座继续介绍BMP图像特效效果
    第四节 BMP图像操作的补充篇

      上一讲中我们介绍了图像特效显示操作的实现方法,如随机显示效果、马赛克效果、拉幕显示效果等,由于篇幅的限制,还有许多效果没有介绍;本期讲座将接着上一讲的内容,继续介绍一些图像特效显示效果。
    另外,我们前面的学习都是针对现成的BMP图像,在实际工作学习中,绝大部分处理图像过程都是在一个系统环境中,也就是说需要和图像数据的获取设备直接打交道,一般情况下,计算机图像处理系统从系统层次上可分为高、中、低档三个层次,目前比较普及的是低档次的系统,该系统由CCD(摄像头)、图像采集卡、计算机三个部分组成,其结构简单,应用方便,效果也比较不错,得到的图像较清晰,所以目前在工程应用中采用的比较多。这就给开发人员带来一个现实的问题,如何使用图像采集卡呢?目前虽然各种编程资源中基于VC开发经验的文章不少,但是关于如何在VC开发平台上使用图像采集卡的文章的确没发现,笔者借这期讲座的宝贵机会,补充介绍一下如何在程序中编写自己的代码来操作图像采集卡,从而搭建一个完整的图像处理系统。希望通过这部分内容的学习,在读者的脑海里就可以建立一个完整的图像操作系统概念;同时也能够给目前正需要利用图像采集卡开发自己的图像处理系统的朋友有所帮助。

      1. 抖动图像

      在上一节讲座中,我们讲到了如何实现图象的"雕刻""浮雕"效果,它们的实现思想是通过求取"没有处理过的相邻两个像素之间的差值"来实现的。如果没有限制"以前没有处理过的两个像素之间的操作",取而代之的是"处理以前已经操作过的像素",那末就可以将一个像素的灰度值传递到与其相邻的若干像素。事实上,有时后我们必须通过上述的约定才能实现一些效果,如图像的抖动效果。例如,为了使图象看起来好象从左上角向右下角扫过,以产生运动的感觉,必须要反复拷贝左上方的那些像素的灰度值,逐步把它们融合在一起,看起来好象图像后边有一些颜色在逐渐的消失,这就是我们要讲的图象的抖动效果。下面给出了该效果的实现代码:
    void CDibView::OnDouDongImage() //产生"抖动"效果图函数
    {
     HANDLE data1handle;//用来存放图像数据的句柄;
     LPBITMAPINFOHEADER lpBi;//图像的信息头结构;
     CDibDoc *pDoc=GetDocument();//得到文挡指针;
     HDIB hdib;//用来存放图像数据的句柄;
     unsigned char *pData;//指向原始图像数据的指针;
     unsigned char *data;//指向处理后图像数据的指针;
     hdib=pDoc->m_hDIB;//拷贝存放已经读取的图像文件数据句柄;
     lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);//获取图像信息头;
    pData=(unsigned char*)FindDIBBits((LPSTR)lpBi);
    //FindDIBBits是我定义的一个函数,根据图像的结构得到位图的灰度值数据;
    pDoc->SetModifiedFlag(TRUE);
    //设置文档修改标志为"真",为后续的修改存盘作准备;
    data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight); //声明一个缓冲区用来暂存处理后的图像数据;
    data=(unsigned char*)GlobalLock((HGLOBAL)data1handle);//得到该缓冲区的指针;
    AfxGetApp()->BeginWaitCursor();
    int i,j,buf;
    for( i=lpBi->biHeight; i>=2; i--)//从图像右下角开始对图像的各个像素进行"抖动"处理;
      for( j=lpBi->biWidth; j>=2; j--)
      {
    //抖动处理、从图像的右下角开始计算图像斜上方相邻像素的均值;
    buf=(*(pData+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)+*(pData+(lpBi->biHeight-i+1)*WIDTHBYTES(lpBi->biWidth*8)+j-1))/2;
    if(buf>255) buf=255;//限制像素点的灰度范围为0-255;
    if(buf<0)buf=0; *(data+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)=(BYTE)buf;
    }
    for( j=0; j<biHeight; j++)
    for( i=0; i<biWidth; i++)
    //重新写回原始图像的数据缓冲区;
    *(pData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j);     AfxGetApp()->EndWaitCursor();
    pDoc->m_hDIB =hdib//将处理过的图像数据写回pDoc中的图像缓冲区;
    GlobalUnlock((HGLOBAL)hdib);//解锁、释放缓冲区;
    GlobalUnlock((HGLOBAL)data1handle);
    GlobalFree((HGLOBAL)hdib);
    GlobalFree((HGLOBAL)data1handle);
    Invalidate(TRUE);//显示图像


      对于比较复杂的图像,计算当前像素的灰度和斜上方像素的均值产生的抖动效果可能不明显,为了解决这个问题,笔者的解决办法是隔行隔列的计算,比如说计算当前位置(i j)的灰度值,我取(i,j)和(i-2,j-2)两个位置的像素的灰度值的平均。
    2.图像合成技术

      图像合成技术很重要,其实质是操作将两幅或两幅以上的图像,将它们的信息融合在一起,产生1+1>2的效果。我们在进行图像合成的时候可以采用Alpha值的方法,下面来看一下如何利用Alpha值来合成两张图片。

      采用Alpha图象合成的方法,就是最终合成的图象的各点像素值是由用来制作合成图的两张图片的相应点的像素值按一定比例混合而成的,这个比例由Alpha值决定,具体算式如下: 
    resultPixe= (pixel1*(255-Alpha)+pixel2*Alpha)/255;
    // Alpha取值范围从0到255 

      上面的算式中,pixel1代表图像1的当前像素点的灰度值,pixel2代表图像2的当前像素点的灰度值,Alpha可以看作两个像素在最终合成的结果中所占的权重。可以看出,只要修改Alpha的值,就可以改变合成后的图象中用来合成的两张图片各自所占的比值,改变合成后的显示效果。我们可以利用这个方法,按一定的时间间隔修改Alpha的值、这样就可以很轻易的制作出生动的淡入淡出效果、实现两幅图片间的平滑过度效果。下面给出一个制作合成图的具体源码:
    BOOL CompoundImage(HANDLE HDib1,HANDLE HDib2,int alpha)
    {
    BYTE lpData1,lpData2;
    // 源图象2的信息 
    //由于待合成的两个图象的格式、大小是一样的,所以我只获取一个图像文件的图像信息就可以了。
    LPBITMAPINFO lpBi=(LPBITMAPINFO)HDib2; 
    // 计算图象数据偏移量
    lpData2=(LPVOID)((LPBYTE)lpBi->bmiColors+256*sizeof(RGBQUAD)); 
    //获取源图像2的图像数据;
    lpBi=(LPBITMAPINFO)HDib1;
    lpData1=(LPVOID)((LPBYTE)lpBi->bmiColors+256*sizeof(RGBQUAD));
    //通过alpha值合并两张图象的像素值 
    for ( int i=0;i< lpBi->biWidth; i++ )
    for(int j=0;j< lpBi->biHeight;j++ )
    {
    //套用alpha图像混合公式;
    * (lpData1+i*WIDTHBYTES(lpBi->biWidth*8)+j)=(* (lpData1+i*WIDTHBYTES(lpBi->biWidth*8)+j)*(255-alpha)+ * (lpData2+i*WIDTHBYTES(lpBi->biWidth*8)+j)*alpha)/255;
    }
    return lpData1;
    }

      以上内容我们主要是讲述了alpha图像混合的实现原理和方法,其实读者大可不必自己写这么多代码,微软给我们提供了一个名为AlphaBlend()的函数,它就可以直接实现图像合成的功能,具体怎么使用,还请读者参考MSDN。
    3.采集卡的操作

      图像处理所涉及的应用领域有军事应用、医学诊断、工业监控、物体的自动分检识别等等,这些应用系统无不需要计算机提供实时动态,效果逼真的图像。目前获取实时图像一般都需要在计算机内部安装一个图像采集卡,用来实现CCD端获取的模拟图像的数字化转换。笔者结合自己在项目开发中积累的一些经验,谈一下如何操作图像采集卡、然后再此基础基础上再实现一些特殊处理。

      笔者的摄像机采用台湾BENTECH INDUSTRIAL 有限公司生产的CV-155L黑白摄像机。该摄像机分辨率为752x582。图象采集卡采用的是北京中科院科技嘉公司开发的基于PCI 总线的CA- MPE 1000 黑白图象采集卡。一般情况下,使用图像采集卡分三步,首先安装采集卡的驱动程序,并将虚拟驱动文件VxD.vxd拷贝到Windows 的SYSTEM目录下;这时候就可以进入开发状态了,进入VC开发平台,生成新的项目,由于生产厂家为图像采集卡提供了以mpew32.dll、 mpew32.lib命名的库文件,库中提供了初始硬件、采集图像等函数,为使用这些函数,需要在新项目上连接该动态库;最后一步就是采集图像并显示处理了,这一步要设置系统调色板,因为采集卡提供的是裸图形式,既纯图像数据,没有图像的规格和调色板信息,这些需要开发者自己规定实现,下面是实现的部分代码: 

    CTestView::CTestView()
    {
    W32_Init_MPE1000();//初始化采集卡
    W32_Modify_Contrast(50);//下面的函数是为了对采集卡进行预设置 
    W32_Modify_Brightness(45);//设置亮度 
    W32_Set_HP_Value(945);//设置水平采集点数
    wCurrent_Frame = 1;//当前帧为1,获取的图像就是从这帧取得的 
    // 设置采集信号源,仅对MPE1000有效 
    W32_Set_Input_Source(1);//该图像采集卡支持三路视频,目前采集的图像来自第二路输入端;
    W32_Set_PAL_Range(1250, 1024);//设置水平采集范围 
    W32_Set_VGA_Mode ( 1 ); 采用PAL制式;
    wGrabWinX1 = 0; // 采集窗口的左上角的坐标
    wGrabWinY1 = 0;
    firstTime=TRUE//第一次采集;
    bGrabMode = FRAME; //抓图模式为?格式;
    bZipMode = ZIPPLE; //压缩模式为ZIPPLE;
    lpDib=NULL;//存放获取的图像数据缓冲区为空;


    CTestView::~CTestView()
    {
    W32_Close_MPE1000();//关闭采集卡 
    }

    void CTestView::OnGraboneframe()//显示采集的图象,双击鼠标采集停止

    // TODO: Add your command handler code here
    wCurrent_Frame = 1; 
    // 设置采集目标为内存 
    W32_CACardParam (AD_SETGRABDEST, CA_GRABMEM);
    // 启动采集
    if (lpDib != NULL)//如果图像缓冲区不为空,释放该缓冲区; 
    {
    GlobalUnlock( hglbDIB );
    GlobalFree( hglbDIB ); 
    }
    //为采集到的图像数据分配内存;
    hglbDIB=GlobalAlloc(GHND, (DWORD)wImgWidth*(DWORD)wImgHeight ); 
    lpDib = (BYTE *)GlobalLock( hglbDIB ); //得到图像数据的指针;
    hdc = GetDC()->GetSafeHdc( ) ; //获取视图的设备上下文句柄;
    if(lpDib != NULL) 

    cxDib = wImgWidth; 
    cyDib = wImgHeight; 
    SetLogicPal( hdc, cxDib, cyDib, 8 ); //设置调色板;
    SetStretchBltMode (hdc, COLORONCOLOR) ; 
    bGrabMark = TRUE
    while (bGrabMark == TRUE

    if(msg.message==WM_LBUTTONDBLCLK) //分析是否为鼠标双击消息;
    bGrabMark = FALSE;//如为鼠标双击消息,停止采集图象;
    W32_ReadXMS2Buf (wCurrent_Frame,lpDib) ; //将图象数据读入到图像数据缓冲区;
    SetDIBitsToDevice (hdc, 0, 0, cxDib, cyDib, 0, 0, 
    0, cyDib, (LPSTR) lpDib, 
    bmi, DIB_RGB_COLORS) ; //显示图像;
    }
    // 停止采集
    W32_CAStopCapture();
    ::ReleaseDC( GetSafeHwnd(), hdc );
    return ; 

    //将下面这个函数添加在视图类的CTestView::OnSize()函数中,就可以对系统的调色板进行设置。
    void WINAPI InitLogicPal( HDC hdc , short width, short height, WORD bitCount )

    int j, i; 
    short cxDib, cyDib; 
    LOGPALETTE * pLogPal; 
    j=256 ; 
    if((pLogPal=(LOGPALETTE*)malloc(sizeof(LOGPALETTE)+ (j*sizeof(PALETTEENTRY)))) == NULL) 
    return ;
    pLogPal->palVersion=0x300; //设置调色版的颜色信息;
    pLogPal->palNumEntries=j; 
    for (i=0;i pLogPal->palPalEntry[i].peRed = i ; 
    {
    pLogPal->palPalEntry[i].peGreen = i ; 
    pLogPal->palPalEntry[i].peBlue = i ; 
    pLogPal->palPalEntry[i].peFlags = 0; 

    hPal = ::CreatePalette(pLogPal); //创建调色板;
    delete pLogPal; 
    ::SelectPalette(hdc,hPal,0);//系统实现调色板;
    ::RealizePalette(hdc); 
    cxDib = width; cyDib = height; 
    if ( (bmi = (BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER) + j*sizeof(RGBQUAD))) == NULL ) 
    return ; 
    //定义图

     

     

     

     

    参考资料:

    http://www.cnblogs.com/xcvm/articles/260389.html

     

    展开全文
  • 全渠道零售中台与数字化转型(1)-中台的前世今身

    千次阅读 多人点赞 2019-06-25 15:37:59
    本系列博客的目标是计划使用近半年时间创造: ... 全渠道零售中台与数字化转型(2)-中台给企业业务带来什么实际的价值 全渠道零售中台与数字化转型(3)-中台给企业技术带来什么实际的价值? 全渠...
  • 他们还建立了个大规模人脸扫描数据库,用于训练这个系统。实验证明,该系统比当前常用的最好模型表现优异许多,可以将任意角度拍摄的 2D 快照生成逼真的 3D 人脸。Science 对此作了报道,标题中提到“计算机科学家...
  • highspeedlogic算法仿真---数字滤波技术

    千次阅读 2020-08-29 16:22:23
    数字滤波器是输入数字序列变为输出数字序列的数字信号处理器,是语音与图形处理,模式识别和谱分析等应用中的种基本的处理部件。如上文所说,数字处理具有灵活性强,精度高,处理成本低以及对环境没有特殊要求等...
  • CPU占用率百分百原因及解决方法

    千次阅读 2007-01-04 15:50:00
    我们在使用Windows XP操作系统的时候,用着用着系统就变慢了,看“任务管理器”才发现CPU占用达到100%。这是怎么回事情呢?遇到病毒了,硬件有问题,还是系统设置有问题,在本文中笔者将从硬件,软件和病毒三个方面...
  • 数字推理题的解题技巧

    千次阅读 2013-10-01 17:59:42
    部分:数字推理题的解题技巧2 第二部分:数学运算题型及讲解6 第三部分: 数字推理题的各种规律8 第四部分:数字推理题典!!16 (数字的整除特性)62 继续题典65 本题典说明如下:本题典的所有题都适用! 1...
  • 南阳OJ 成绩转换

    2015-09-19 09:59:06
    描述输入百分制的成绩M,将其转换成对应的等级,具体转换规则如下: 90~100A; 80~89B; 70~79C; 60~69D; 0~59E; 输入第行是个整数N,表示测试数据的数(N 每测试数据占行,由个...
  • 3D打印:三维智能数字化创造(全彩)(全球第本系统阐述3D打印与3D智能数字化的专业著作) 吴怀宇 编  ISBN 978-7-121-22063-0 2014年1月出版 定价:99.00元 428页 16开 编辑推荐 本书包含最新创客实践:...
  • k-近邻算法实现手写数字识别系统

    千次阅读 2017-03-26 15:48:41
    k-近邻算法实现手写数字识别系统 、实验介绍 1.1 实验内容 本实验将会从电影题材分类的例子入手,详细讲述k-近邻算法的原理。在这之后,我们将会使用该算法实现手写数字识别系统。 1.2 课程来源 本课程源自 ...
  • 数字逻辑标准及接口技术

    千次阅读 2007-08-09 22:08:00
    数字逻辑标准及接口技术2007-01-09 19:46 我们知道,0和1是数字世界的两个基本元素,在数字电路中它们由特定范围的高低电平来表示。数字电路发展的早期,绝大多数数字器件都采用TTL和CMOS数字逻辑标准。近几年,产生...
  • 英语听力数字练习

    万次阅读 2019-02-20 19:56:58
    英语听力数字练习
  • 导 读 ( 文/ e-works整理 ...、什么是MES制造执行系统 (manufacturing execution system,简称MES);是一套面向制造企业车间执行层的生产信息化管理系统。MES可以企业提供包括制造数据管理、计划排程管理、生产调
  • c/c++一百道小程序

    万次阅读 多人点赞 2015-04-14 18:52:16
    1.绘制余弦曲线  2.绘制余弦曲线和直线  ...10.数制转换  11.打鱼还是晒网  12.抓交通肇事犯  13.该存多少钱  14.怎样存钱利最大  15.捕鱼和鱼  16.出售金鱼  17.平分七筐鱼  18.有限5位数
  • VC数字图像处理编程讲座之二

    千次阅读 2005-11-24 15:28:00
    VC数字图像处理编程讲座之二前 言 数字图像处理技术与理论是计算机应用的个重要领域,许多工程应用都涉及到图像处理,一直有个强烈的愿望,想系统的写个关于数字图像处理的讲座,由于工作学习很忙,时至今日才...
  • 马化腾是数字化转型时代最大的困惑,所有的目光都在盯着腾讯在企业数字化转型时期的大转身。作为互联网上半场最成功的企业和企业家代表,腾讯与马化腾是个时代的标签。自2004年6月上市,腾讯的股价到2009年也不过...
  • VC数字图像处理

    千次阅读 2013-10-19 18:38:17
    VC数字图像处理编程讲座之 前言  数字图像处理技术与理论是计算机应用的个重要领域,许多工程应用都涉及到图像处理,一直有个强烈的愿望,想系统的写个关于数字图像处理的讲座,由于工作学习很忙,时至...
  • 一代、二代、三代测序技术原理与比较

    万次阅读 多人点赞 2017-11-10 14:08:02
    从1977年第代DNA测序技术(Sanger法)1,...测序技术的每次变革,也都对基因研究,疾病医疗研究,药物研发,育种等领域产生巨大的推动作用。在这里我主要对当前的测序技术以及它们的测序原理做个简单的小结。
  • 波士顿咨询公司(BCG)和麻省理工学院(MIT)信息系统研究中心(CISR)合作完成了个历时两年的项目,着重研究数字化组织的设计。我们对多个行业的超过40家企业进行了整体以及个体研究,发现卓越的数字化企业在5个...
  • 释了分布式数据存储技术的进步和市场激励的强大结合,正合力形成个更安全、更高效的网络。 在不到三十年的时间里,互联网已成为人类历史上最伟大的成就之,因为以前在科学、技术和商业领域从未出现过如此看得见...
  • 输入百分制的成绩t,将其转换成对应的等级,具体转换规则如下: 90~100A; 80~89B; 70~79C; 60~69D; 0~59E; Input 输入数据有多,每行,由个整数组成。 Output 对于每...
  • 船模制作基础大全

    千次阅读 2011-09-26 08:50:36
    转自:... ()怎样看模型的工作图纸 我们在制作各种航海模型以前,首先接触到的就是份模型工作图纸,它不仅告诉我们模型的种类、名称、外形
  • VC数字图像处理编程

    千次阅读 2013-12-04 17:30:59
    数字图像处理技术与理论是计算机应用的个重要领域,许多工程应用都涉及到图像处理,一直有个强烈的愿望,想系统的写个关于数字图像处理的讲座,由于工作学习很忙,时至今日才得以实现。  “图”是物体...
  • 数字网络监控系统解决方案1

    千次阅读 2010-04-22 18:15:00
    局域网或广域网) Post By:2004-9-11 12:05:00 数字网络监控系统解决方案 、XM3216.NET系统特点近年来,网络信息业取得了长足的发展,银行网络建设已发展成为较为完善的远程通信网络系统,远程实时监控提供了...
  • 总结:与往届题目相比,,暴力题型少了许多,增加了dp和图论的考察,不过在不会的情况下,暴力还是能骗不少的 目录 试题A:门牌制作 试题B:寻找2020 试题C:蛇形填数 试题D:七段码 试题E:排序 试题F:...
  • 二进制数转换为十进制数二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……所以,设有个二进制数:0110 0100,转换为10进制:下面是竖式: 0110 0100 换算成 十进制 第0位 0 * 20 = 0第1位 0 * 21 = 0...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,411
精华内容 6,964
关键字:

一组数字转换为百分制