2019-02-20 10:35:13 Gerwels_JI 阅读数 113
  • R语言绘图基础

    介绍R语言的绘图基础,如固有颜色、RGB取色、主题调色板介绍,文字字体、颜色、大小等参数详解,点样式、颜色、大小等参数详解,线条样式、颜色、粗细等参数详解;详细介绍R低级绘图函数:标题、图例、坐标轴、网格线、点、线等;后介绍了R绘图函数:散点图、线图、箱线图、散点图矩阵、气泡图等。

    2607 人正在学习 去看看 谢佳标

1.1 数字图像

  • 位图(BMP/JPG/GIF)和矢量图(PNG)
  • 二值图像、灰度图像、RGB图像(表1.1常见颜色RGB组合值)、索引图像(节省存储空间,使用了Palette(调色板)技术)
  • Spatial Resolution(单位:ppi(pixels per inch)(分辨率越高,图像越清晰,存储量越大)(描述:M*N像素)
  • 灰度级分辨率(色阶)(即:可分辨的灰度级数目)

1.2 数字图像处理与识别

  • 发展简述
    在这里插入图片描述
  • Digital Image Processing & Digital Image Analyzing & Digital Image Recognition的区别
    在这里插入图片描述
  • Computer Graphics

1.3 数字图像处理的预备知识

  • 数字图像是由具有一定空间位置关系的像素点构成,故有一些度量和拓扑关系
  • 邻接性(Adjacence)
  1. 以下是对像素P的4邻域、8邻域和对角邻域的定义
    在这里插入图片描述
  2. 定义对角邻域为8邻域中不属于4邻域的部分
  3. 4-Neighbor和8-Neighbor
    在这里插入图片描述
  • 连通性(Contiguous)
  1. 通路(Path)& 闭合通路
  2. 像素的连通性:若像素子集S中的所有的像素,每两个相邻的像素之间是相邻接的(4,8,m),并且只有一个通路,那么S为连通集。
  • 区域(Region)
    令R是图像中的一个像素子集。如果R是连通集,则R被称作为一个区域。两个区域Ri和Rj如果能形成一个连通集,那么称这两个区域为邻接区域。不过在讨论是否为邻接区域的时候,只能考虑区域边界的像素是否构成4邻接和8邻接,而不考虑m邻接。在定义区域邻接的时候,必须指定邻接类型。
  • 边界(Boundary)和边缘(Edge)
    边界是和区域有关的全局概念,一般指整个画布的大小
    边缘表示图像函数的局部性质,一般指画布中物体的外围边界

参考文章:https://blog.csdn.net/ddiicey/article/details/73864470

  • 距离度量D(P,Q):欧式距离、街区距离、棋盘距离
  • 基本运算:点运算与邻域运算(都属于灰度变换运算)、线性操作(如:平均平滑滤波、高斯平滑滤波、梯度锐化滤波)与非线性操作(如:中值滤波)
2010-07-31 22:32:00 tlovet1314 阅读数 2668
  • R语言绘图基础

    介绍R语言的绘图基础,如固有颜色、RGB取色、主题调色板介绍,文字字体、颜色、大小等参数详解,点样式、颜色、大小等参数详解,线条样式、颜色、粗细等参数详解;详细介绍R低级绘图函数:标题、图例、坐标轴、网格线、点、线等;后介绍了R绘图函数:散点图、线图、箱线图、散点图矩阵、气泡图等。

    2607 人正在学习 去看看 谢佳标

1.1 位图和调色板的概念

1. 真彩色图: 它的颜色数高达256×256×256种,也就是说包含我们上述提到的RGB颜色表示方法中所有的颜色。真彩色图是说它具有显示所有颜色的能力,即最多可以包含所有的颜色。

 

1.2 bmp文件格式

(WORD为无符号16位整数,DWORD为无符号32位整数,LONG32长整型)

1.      bmp文件大体上分成四个部分:

1)位图文件头BITMAPFILEHEADER,共14个字节。

2)位图信息头BITMAPINFOHEADER,共40个字节。

3)调色板Palette

4)实际的位图数据ImageDate

调色板实际上是一个数组,共有biClrUsed个元素(如果该值为零,则有 个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节。(红色,绿色与蓝色的排序与一般图像文件的颜色数据排序恰好相反~)

对于用到调色板的位图,图象数据就是该象素颜在调色板中的索引值。对于真彩色图,图象数据就是实际的RGB

 

2. 要注意两点:

1) 每一行的字节数必须是4的整倍数,如果不是,则需要补齐。

2) 一般来说,BMP文件的数据从下到上,从左到右的

 

1.3 显示一个bmp文件的C程序

一,loadBmpFile函数实现过程:

1.    打开文件到HFILE结构变量中。

2.    HFILE变量中读取BITMPFILEHEADERBITMAPINFOHEADER两个结构变量。

3.    计算图像行字节数和图像总字节数。

4.    计算实际使用到的颜色个数并验证结果.

5.    填写bf.bfsize;

6.    分配全局内存空间,大小为(bitmapinfoheader+palette+实际图像)返回一个句柄。

7.    LPBITMAPINFOHEADER指向分配的全局内存空间。

8.    文件指针重新定位到BITMAPINFOHEADER开始处并将内容读入LPBITMAPINFOHEADER类型指针中。关闭文件。_hread_lread的区别

9.    NumColors不为零时,说明用到了调色板。为逻辑调色板分配局部内存,大小为逻辑调色板结构长度加NumColorsPALETTENTRY

10.LOGPALETTE类型指针pPal指向该内存区,填写逻辑调色板结构的头。lpRGB指向的是调色板开始的位置,填写pPal->palPalEntry每一项。

11.产生逻辑调色板全局变量hPalette,解锁并释放局部内存。

12.获得设备上下文句柄。

13.如果产生了逻辑调色板,将新的逻辑调色板选入DC,将旧的逻辑调色板句柄保存在hPrevPalette中。

14.产生位图句柄。使用完现在的调色板,就要把原来的调色板还原至DC中。

15.释放设备上下文,解锁内存区。

 

二,响应WM_PAINT消息:

1.    获得屏幕设备上下文BeginPaintGetDC的区别

2.    建立一个内存设备上下文。当有调色板,将调色板选入屏幕设备上下文和内存设备上下文。

3.    将位图选入内存设备上下文,显示位图,释放内存设备上下文,释放屏幕设备上下文。

注意1)要2DC的原因是,在绘制位图时要将源(内存)设备上下文的内容复制到目的(屏幕)设备上下文中。

 

   书提供的代码运行都有问题,经过修改,错误是没了,不过就是图片显示不出来!而且对它的代码还有一些不太明白,比如系统如何发送WM_LOADBITMAP这个消息的呢?

 

终于解决了!!

答:看书上提供的代码时没有注意到有一个.rc为后缀的资源文件,里面定义了一个menu,menu里面有一个子控件open,它和WM_LOADBITMAP关联。以前从来没想过去手动编辑资源文件,要不是昨天开始尝试使用dos下编译c++文件,怎么也没想要打开这个文件看看。看来放一放还是对了,忍了这么久终于解放了!稍后写一篇关于如果VC资源文件结构的文章,对以后学习有帮助。

2015-11-27 21:37:05 crzmy 阅读数 662
  • R语言绘图基础

    介绍R语言的绘图基础,如固有颜色、RGB取色、主题调色板介绍,文字字体、颜色、大小等参数详解,点样式、颜色、大小等参数详解,线条样式、颜色、粗细等参数详解;详细介绍R低级绘图函数:标题、图例、坐标轴、网格线、点、线等;后介绍了R绘图函数:散点图、线图、箱线图、散点图矩阵、气泡图等。

    2607 人正在学习 去看看 谢佳标
我们知道,bmp(bitmap picture)图像格式是目前在数字图像处理领域通用的图片格式。

它是windows系统交换图形、图像数据的一种标准格式。

下图1是文件信息头的格式。
图1 文件信息头
根据上面的图表,我们实现以下两个问题:
1. 将24位真彩色图像转为8位灰度图
2. 实现图像的裁剪


实例1: 将24位真彩色图像转为8位灰度图(BMP格式)

  1. 实例分析
    1) 读取24位真彩色图像
    读取24位真彩色图像和8位灰度图像最大的区别有两个:a. 24位真彩色图像的图像数据为24位,分别是BGR(各8位)。b. 没有调色板(因为每BGR三个分量就表示一种颜色)
    特别注意:的是RGB图像三个分量的排列方式是BGR
    2) 将彩色信息转化为灰度信息
    一般有以下三种转换公式:
    a. RGB各占三分之一
    Gray = R*0.333 + G*0.333 + B*0.333
    b. 基于人类视觉对RGB三种颜色的敏感程度不同,而有以下公式:
    Gray = R*0.299 + G*0.587 + B*0.114
    c. 这种公式我应用在车牌识别中,因为我国车牌大多蓝底白字,所以我将蓝色分量的权值改为0,那么蓝色像素体现在灰度图像中就变黑了,而白色依然是白色,有着较好的区分效果。
    Gray = R*0.5 + G*0.5
    3) 保存灰度图像
    a. 需要注意的是,我们读取彩色图像的文件头,是不能直接用在灰度图像中的。需要修改文件头的第2-5字节、10-13字节和28-29字节的内容。第2-5字节的内容为bmp文件的大小,其大小包括文件信息头54字节,调色板1024字节(8位灰度图,位数不同都不一样,24位真彩色没有调色板),位图数据。
    举个例子:一幅640*480的8位灰度bmp格式文件的大小为
    Size = 54 + 1024 + 640*480 = 308278 byte(转为16进制就是00 04 B4 36H)
    一幅640*480的24位真彩色bmp格式文件的大小为
    Size = 54 + 640*480*3 = 921654 byte(转为16进制就是00 0E 10 36H)
    第10-13字节和28-29字节的修改在图1已经详尽说明,在此不再赘述。

  2. 彩色图像转灰度图像函数代码(图像读写函数未贴出)

void ColtoGray(int Row,int Col,unsigned char *imageIn,unsigned char *imageOut,float a,float b,float c)
{
    int x,y;
    int n;
    float sum=0;
    for(y=0;y<Row;y++)
        for(x=0;x<Col;x++)
        {
            for(n=0;n<3;n++)
            {
                switch(n)
                {
                    case 0:
                        sum=sum+imageIn[(y*Col+x)*3]*a;   break;
                    case 1:
                        sum=sum+imageIn[(y*Col+x)*3+1]*b; break;
                    case 2:
                        sum=sum+imageIn[(y*Col+x)*3+2]*c; break;
                }
            }
            imageOut[y*Col+x]=sum;
            sum=0;
        }
}

实例2: 实现图像的裁剪

  1. 实例分析
    1)图像裁剪就是在原图上抠出一个矩形区域,并将它另存为bmp图像输出。
    2)重点和难点是修改文件信息头中的宽(第18-21字节)和高(22-25字节)的信息以及实例1中文件大小的修改。
  2. 实例代码
void imageCut(int Row,int Col,unsigned char *imageIn,unsigned char *Fheadg,int startCutX,int startCutY,int cutx,int cuty,unsigned char *imageOut,unsigned char isCol)
{
    int i,j;
    int x,y;
    unsigned char n;
    int imageSize;
    if(Row<startCutY+cuty||Col<startCutX+cutx)
    {
        printf("超出裁剪范围");
        return; 
    }
    if(isCol == 1) 
    {
        n = 3;
        imageSize = n*cutx*cuty+54;
    }
    else
    {
        n = 1;
        imageSize = n*cutx*cuty+1078;
    }
    //头文件宽高和文件大小修改
    Fheadg[2]  = imageSize%256;
    Fheadg[3]  = imageSize/256%256;
    Fheadg[4]  = imageSize/256/256%256;
    Fheadg[5]  = imageSize/256/256/256%256;
    Fheadg[18] = cutx%256;
    Fheadg[19] = cutx/256;
    Fheadg[22] = cuty%256;
    Fheadg[23] = cuty/256;
    for(y=0,i=startCutY;i<startCutY+cuty;y++,i++)
        for(x=0,j=startCutX;j<(startCutX+cutx)*n;x++,j++)
            imageOut[y*cutx*n+x] = imageIn[i*Col*n+j];
}

*本文章是作者辛苦所做,如有不足望大家指出。另转载请注明出处,谢谢各位了。*

2012-10-26 10:50:33 shen_gan 阅读数 1219
  • R语言绘图基础

    介绍R语言的绘图基础,如固有颜色、RGB取色、主题调色板介绍,文字字体、颜色、大小等参数详解,点样式、颜色、大小等参数详解,线条样式、颜色、粗细等参数详解;详细介绍R低级绘图函数:标题、图例、坐标轴、网格线、点、线等;后介绍了R绘图函数:散点图、线图、箱线图、散点图矩阵、气泡图等。

    2607 人正在学习 去看看 谢佳标

图像处理里面调色板(Palette)是什么意思?

1. 图像处理中为了节省表示图像RGB信息的空间用调色板存储彩色信息(RGB值),数据区只存储当前象素的色彩在调色板中的位置,这样就省了很多字节。不过真彩色的图像没有调色板。

2. 其实很简单,可以举个简单的例子,调试板是指一块区域,一个大的结构数组
数组中每个元素由   RGBQ   构成,R存放红色值,类推,Q是保留位,一般不用。
比如有一副真彩24位图象数据(无调色板)   一组RGB(就是一个象素)总共占3个字节
(R1G1B1)   (R2G2B2)(R3G3B3)   (R1G1B1)     (R1G1B1)(R1G1B1)(R1G1B1
  7个象素   有5个颜色重复的象素的,总共21字节
 
转成8位(256色)   有调色板
就变成了
n0   n1   n2   n0   n0   n0   n0n1...nX   是一个字节,只存放索引号,对应调色板数组的序号)

-----调色板------
0-----R1G1B1Q
1-----R2G2B2Q
2-----R3G3B3Q
  加起来才19字节
重复的象素值越多,越省空间,这就是调色板的作用,但是如果重复的次数不多的话,你看到调色板里有很多Q,这样反而不省空间,不如用24位直接显示了

3. 调色板不是颜色的索引!!!   只有具有调色板的图像数据才是索引,调色板是结构数组

 

2019-03-23 23:57:00 qq_36285879 阅读数 214
  • R语言绘图基础

    介绍R语言的绘图基础,如固有颜色、RGB取色、主题调色板介绍,文字字体、颜色、大小等参数详解,点样式、颜色、大小等参数详解,线条样式、颜色、粗细等参数详解;详细介绍R低级绘图函数:标题、图例、坐标轴、网格线、点、线等;后介绍了R绘图函数:散点图、线图、箱线图、散点图矩阵、气泡图等。

    2607 人正在学习 去看看 谢佳标
没有更多推荐了,返回首页