彩色图像--伪彩处理 灰度图转伪彩色图像

学习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光扫描图

卫星地形图:

星云:

总结

伪彩色图乡相对灰度图像能够识别更多的细节,可分辨性较强。而且转换方式灵活,可以根据需要自行设计转换函数,或者自制映射表。

待续。。。

时间: 2024-10-12 15:50:52

彩色图像--伪彩处理 灰度图转伪彩色图像的相关文章

Qt 中彩色图像转换为灰度图

最近在做几个图像处理相关的项目.里面有一个操作就是需要先将彩色图像转换为灰度图像.QImage 有一个convertToFormat方法.最开始一直用这个函数来实现.但是今天仔细看了看,发现这个函数转换出的灰度图与原始图像的亮度似乎是有区别的.比如说下面这副图像: 用下面这三行代码转换: QImage image2 = image.convertToFormat(QImage::Format_Indexed8); image2.setColorCount(256); for(int i = 0;

(4)彩色图像转灰度图以及色调,饱和度等概念相关定义

以下关于定义的内容来自冈萨雷斯——<数字图像处理> RGB彩色模型:图像由三个分量图像组成,每种原色一副分量图像.当送入RGB监视器时,这三幅图像在屏幕上混合生成一副合成的彩色图像. HSI彩色模型:RGB模型的彩色系统对于硬件实现很理想,且与人眼强烈感知红.绿.蓝三原色的事实能很好的匹配.遗憾的是RGB模型和其它类似的彩色模型不能很好的适应实际上人解释的颜色(1).人观察一个彩色物体时,我们用其色调.饱和度和亮度来描述它,这就是HSI彩色模型. (1)原因与人眼中感光细胞对各种原色光的敏感度

opencv将图像转化为灰度图,然后边缘检测

1:代码如下: #include "stdafx.h" #include "highgui.h" #include "cv.h" #include "iostream" using namespace std; IplImage* doCanny(IplImage* in,double lowThresh,double highThresh,double aperture) { if(in->nChannels !=1)

灰度图转彩色图(伪彩色处理)

将8Bit灰度数据转化为Bgr24的彩色图像 8bit灰度数据:byte[] GrayValue    长度:width * height PixelFormat pixelFormat = PixelFormats.Bgr24; byte[] colorvalues = GrayToColor(GrayValue); ByteSize = Width * Height; IntPtr dataPtr = IntPtr.Zero; GCHandle _hObject = GCHandle.All

怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?

  分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.bmp", 0 ); 这样图像已经灰度化,然后调用cvThreshold(image, image, 125, 255, CV_THRESH_BINARY); 就可以了,125那里是你所用的阈值,这就是最简单的二值化,你要用ostu,或者别的高级一点的,就要自己写函数了   // Truncate v

RGB图像转为灰度图

最后结论: Grey = (R*38 + G*75 + B*15)>> 7 代码 #include <cv.h> #include <highgui.h> using namespace cv; int main(){ Mat src= imread("C:\\Users\\Poplar\\Pictures\\ff.jpg"); Matgrey(src.rows, src.cols, CV_8UC1, Scalar(0)); for (inty =

【python】RGB图片到灰度图的转换

在做立体匹配求深度图的时候遇到这个问题,用惯了matlab的rgb2gray,倒是不熟悉python的实现,在网上找到了相关方案,记下来已作备用 RGB到灰度图转换公式: Y' = 0.299 R + 0.587 G + 0.114 B 自定义转换函数: 1 import numpy as np 2 3 def rgb2gray(rgb): 4 return np.dot(rgb[...,:3], [0.299, 0.587, 0.144]) 调用: 1 grayPic = rgb2gray(r

从视频文件中读入数据--&gt;将数据转换为灰度图--&gt;对图像做candy边缘检测

//从视频文件中读入数据-->将数据转换为灰度图-->对图像做candy边缘检测 //作者:sandy //时间:2015-10-10 #include <cv.h> #include <highgui.h> int main(int argc, char *argv[]){ //预备工作 CvCapture* capture=cvCreateFileCapture("E:\\Videos\\xx.avi");//让capture变量指向视频文件 i

mupdf实现常用图片转换为灰度图pnm

我要实现的工作是使用mupdf库转换pdf.jpeg.tif等文件为灰度图,转换完成的灰度图存放到内存中,而不是存为文件,在读取到内存中,主要是嵌入式系统中使用.下面是example.c,我加了我理解的注释,以及自己修改的地方.example.c全文 #include <mupdf/fitz.h> void render(char *filename, int pagenumber, int zoom, int rotation) { // Create a context to hold t