zoukankan      html  css  js  c++  java
  • 彩色图像--伪彩处理 灰度图转伪彩色图像

    学习DIP第68天
    转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

    开篇废话

    观察了一下冈萨雷斯的书,发现彩色图像处理仅仅用了一章进行介绍,原因分析了一下,后来发现,好像别的介绍的也不多,得出一个结论。冈萨雷斯这本书仅仅能作为一部纲领性的介绍。它基本涵盖了图像处理的基础知识。可是假设想使用某种方向作为工作的话。须要继续找很多其它专业的书和开源项目来学习。

    还是像我之前抱怨的那样。每次看一本书之前都认为自己看完了会变得超级厉害,但每次看完一本书以后反而会认为自己像个傻瓜一样。须要很多其它的书来学习,如此循环,这一生都不会幸福了。盗图一张,与各位共勉

    这里写图片描写叙述

    原理

    说到伪彩色图像,与其相应的是真彩色,以下介绍下其差别和性质。
    我们知道可以观察出颜色的光的波长范围是有限的,仅仅有那么一小段,换句话说也就是说有一大段光,仅仅有一小段有颜色。其它都是灰度的,但人类视觉有一个特点就是,仅仅能分辨出二十几种灰度,也就是说採集到的灰度图像分辨率超级高。有一千个灰度级,但非常遗憾。人们仅仅能看出二十几个,也就是说信息损失了五十倍,但人类视觉对彩色的分辨能力相当强,可以分辨出几千种色度。
    在从採集的角度说下伪彩和真彩色,伪彩色原始图像是灰度图像
    灰度图像的来源:

    1. 单通道相机或其它传感器(比方CT用的平板)採集到的都是灰度图,这里包含使用单通道採集的频率高于可见光的频率的电磁波,可见光,低于可见光频率的电磁波。
      这里写图片描写叙述
      图中红色框内为不可见光,没有颜色。所以他们一定是灰度图,须要时要进行伪彩色处理。

    2. 使用多通道採集设备採集的不可见光,这种图像有时候是单通道的。就是1中所说的,也有可能是多通道,不如卫星就有可能,红外。可见光,还有其它不可见光採集设备。这种多通道灰度图有时候须要进行伪彩处理。

    真彩色图的来源:
    用多通道採集设备,多为相机来採集可见光,这样得到的是多通道真彩色图像。

    算法分析

    对于单通道灰度图转换成伪彩图像的方法是将一种灰度映射为一种颜色。而映射方式不唯一。可以依据须要自行设定,以下的代码使用的算法是我自己想出来的,使用到了HSV色彩空间。并将当中的饱和度和亮度设为1.0,色相使用灰度0到255映射到0°到270°:

    这里写图片描写叙述

    代码

    void Gray2Color(double *src,RGB* dst,int width,int height,int type){
        HSV* temp=(HSV*)malloc(sizeof(HSV)*width*height);
        for(int i=0;i<width*height;i++){
            double gray_value=src[i];
            if(type==HIGHVALUE_EQU_RED)
                temp[i].c1=HSVMAX-GRAY2HSV*gray_value;
            else if(type==LOWVALUE_EQU_RED)
                temp[i].c1=GRAY2HSV*gray_value;
            temp[i].c2=1.0;
            temp[i].c3=1.0;
        }
        HSV2RGB(temp, dst, width, height);
        free(temp);
    }

    效果分析

    灰度渐进图:

    这里写图片描写叙述
    这里写图片描写叙述
    这里写图片描写叙述

    MacBook Pro x光扫描图

    这里写图片描写叙述
    这里写图片描写叙述
    这里写图片描写叙述

    卫星地形图:

    这里写图片描写叙述
    这里写图片描写叙述
    这里写图片描写叙述

    星云:

    这里写图片描写叙述
    这里写图片描写叙述
    这里写图片描写叙述

    总结

    伪彩色图乡相对灰度图像可以识别很多其它的细节,可分辨性较强。

    并且转换方式灵活。可以依据须要自行设计转换函数。或者自制映射表。
    待续。。。

  • 相关阅读:
    Java Runtime.exec()的使用
    加密备忘
    maven 配置 Java Servlet API
    flume spooldir bug修复
    修复eclipse build-helper-maven-plugin 异常
    Win10系统安装Office2016错误,提示需要更新客户端的解决方法
    ORA-14300: 分区关键字映射到超出允许的最大分区数的分区
    ORA-14402:更新分区关键字列将导致分区更改(分区表注意)
    oracle 11g自动时间分区备忘
    Oracle计算时间函数(numtodsinterval、numtoyminterval)
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5132697.html
Copyright © 2011-2022 走看看