《数字图像处理》彩色图像处理
数字图像处理_实验报告书(八)彩色图像处理
rgb=cat(3,rgb_R,rgb_G,rgb_B);figure,imshow(rgb),title('RGB彩色图像');截图:(2)编写MATLAB程序,将一彩色图像从RGB空间转换为HIS空间,并观察其效果。
如例9.2所示。
程序:rgb=imread('LenaRGB.bmp');figure,imshow(rgb);rgb1=im2double(rgb);r=rgb1(:,:,1);g=rgb1(:,:,2);b=rgb1(:,:,3);I=(r+g+b)/3figure,imshow(I);tmp1=min(min(r,g),b);tmp2=r+g+b;tmp2(tmp2==0)=eps;S=1-3.*tmp1./tmp2;figure,imshow(S);tmp1=0.5*((r-g)+(r-b));tmp2=sqrt((r-g).^2+(r-b).*(g-b));theta=acos(tmp1./(tmp2+eps));H=theta;H(b>g)=2*pi-H(b>g);H=H/(2*pi);H(S==0)=0;figure,imshow(H);截图:(3)编写MATLAB程序,将一彩色图像在RGB空间进行彩色分割,并观察其效果。
如例9.11所示。
程序:rgb=imread('LenaRGB.bmp');figure,imshow(rgb);rgb1=im2double(rgb);r=rgb1(:,:,1);figure,imshow(r);g=rgb1(:,:,2);figure,imshow(g);b=rgb1(:,:,3);figure,imshow(b);r1=r;r1_u=mean(mean(r1(:)));[m,n]=size(r1);sd1=0.0;for i=1:mfor j=1:nsd1= sd1+(r1(i,j)-r1_u)*(r1(i,j)-r1_u);endendr1_d=sqrt(sd1/(m*n));r2=zeros(size(rgb1,1),size(rgb1,2));ind=find((r>r1_u-1.25*r1_d)&(r<r1_u+1.25*r1_d));r2(ind)=1;figure,imshow(r2);截图:(4)编写MATLAB程序,将一彩色图像在向量空间进行边缘检测,并观察其效果。
数字图像处理05_彩色图像处理
数字图像处理Ch05. 彩色图像处理Outline•概述•颜色理论–彩色视觉•颜色模型–工业模型–色度学模型–视觉模型•彩色图像处理–伪彩色图像处理–真彩色图像处理•为了简单起见,数字图像处理中的很多方法主要在灰度图像上做示例和推演。
•但是,在实际应用中,我们遇到更多的是彩色图像•彩色图像比灰度图像包含了更多的信息•对色彩进行感知也是人类视觉系统的一项固有的本领。
•随着电子技术、计算机技术的发展,彩色图像的记录设备和输出设备技术都非常成熟•彩色图像在印刷、多媒体、互联网等方面都已经称为主流。
•支持彩色图像处理的物质条件已经成熟,彩色图像处理技术的需求日益高涨。
•和灰度图像相比,彩色图像处理的首要问题是如何表达描述图像的颜色,即建立彩色模型。
•彩色图像处理技术:–伪彩色图像处理:•人对灰度辨别只有几十个级,却可辨别上千种色彩;•将灰度图转化为彩色图像可以提高人们对图像内容的观察效率–真彩色图像处理:•待处理的图像本身是用全彩传感器获得的•彩色图像对场景的描述能力更强,更复杂•彩色图像处理覆盖数字图像处理的各个方面:增强、滤波、分割、识别、压缩、水印。
颜色理论基础•光线没有颜色,只是某种功率频谱分布最早发现光的颜色秘密的是牛顿。
通过棱镜分光实验,牛顿发现白光是由不同颜色的光混合而成颜色理论•视觉的本领:将不同频率的电磁波感知为不同的颜色;•人的眼睛可以分辨几十种亮度,却可以分辨上千种颜色•除了光的颜色,人眼对物体的颜色的感知取决于物体反射光的特性。
如果物体对某些光谱反射比较多,则物体就呈现对应的颜色。
如果物体反射各种光的能力比较均衡,则物体呈白色颜色理论基础•彩色视觉:–物理成像过程–复杂的生理过程•人眼结构:–晶状体:强大的自动调焦能力–视网膜:人眼感知图像信号的窗口,分布着无数的感光细胞,其中可分为柱状细胞和锥状细胞•锥细胞:约6~7百万个–对颜色敏感,适应于强照度–又分为三种,分别对蓝色、红色、绿色敏感–细节分辨能力强,亮视觉•柱细胞:约7千万~1.5亿个–对颜色不敏感,适应于低照度–不能分辨色彩,只能分辨形状–响应快,角度宽–暗视觉•人眼有着非常大的亮度适应范围(10-19~110 lx):–仅仅靠瞳孔调节是远远不够的(瞳孔调节可以使光通量改变约20倍)–还需要靠两类细胞的转换来实现,大约需要30分钟完全适应。
《数字图象处理》第09章彩色图像处理
第9章
彩色图像处理
1 . 三色原理 在人的视觉系统中存在着杆状细胞和锥状细胞两种感光 细胞。杆状细胞为暗视器官,主要功能是辨别亮度信息;锥 状细胞是明视器官,在照度足够高时起作用,其功能是分辨 颜色。锥状细胞将电磁光谱的可见部分分为三个波段: 红 、绿、蓝。由于这个原因,这三种颜色被称为三基色,图 9-1 表示了人类视觉系统三类锥状细胞的光谱敏感曲线。
第9章
彩色图像处理
2 . 颜色的三个属性 颜色是外界光刺激作用于人的视觉器官而产生的主观感 觉。颜色分两大类: 非彩色和彩色。非彩色是指黑色、白 色和介于这两者之间深浅不同的灰色,也称为无色系列。彩 色是指除了非彩色以外的各种颜色。颜色有三个基本属性, 分别是色调、饱和度、亮度。基于这三个基本属性,提出了 一种重要的颜色模型 HSI(Hue , Saturation , Intensity) 。在 HSI 颜色模型部分,将详细介绍这三个基本属性。
第9章 9.1.2
彩色图像处理 颜色模型
为了科学地定量描述和使用颜色,人们提出了各种颜色 模型。目前常用的颜色模型按用途可分为三类: 计算颜色 模型、视觉颜色模型和工业颜色模型。 计算颜色模型用于进行有关颜色的理论研究。常见的 RGB 模型、 CIE XYZ 模型、 Lab 模型等均属于此类型。
第9章
彩色图像处理
RGB 模型与显示器等设备有着很好的对应关系, RGB 显示器中,有三种荧光粉能够分别发射出红、绿、蓝三种颜 色,三个相邻的荧光点构成了一个像素,这些荧光点受到三 束强度分别为 c1 、 c2 、 c3 的电子束的轰击,会发出不同的 亮度,通过物理上的叠加或混合,便可显示出相应的颜色。
第9章
彩色图像处理
强度 I(Intensity) : 对应成像亮度和图像灰度,是颜色 的明亮程度。 HSI 模型的建立基于两个重要的事实: ① 图像的彩色信息无关;② 性检测与分析。 若将 RGB 单位立方体沿主对角线进行投影,可得到 图 9-4(a) 所示的六边形,这样,原来沿主对角线的灰色都 投影到中心白色点,而红色点 (1 , 0 , 0) 则位于右边的 角上,绿色点 (0 , 1 , 0) 位于左上角,蓝色点 (0 , 0 , 1) 则位于左下角。 I 分量与 H 和 S 分量与人感受颜色的方
[数字图像处理](一)彩色图像转灰度图像的三种方式与效果分析
[数字图像处理](⼀)彩⾊图像转灰度图像的三种⽅式与效果分析图像处理(⼀)彩⾊图⽚转灰度图⽚三种实现⽅式最⼤值法imMax=max(im(i,j,1),im(i,j,2),im(i,j,3))平均法imEva=im(i,j,1)3+im(i,j,2)3+im(i,j,3)3加权平均值法imKeyEva=0.2989×im(i,j,1)+0.5870×im(i,j,2)+0.1140×im(i,j,3)matlba实现clc;close all;clear all;% 相对路径读⼊图⽚(和代码在同⼀⽂件夹下)im = imread('p2.jpg');%---查看图⽚,检测是否成功读⼊% 对显⽰的图⽚进⾏排版subplot(2,3,4);imshow(im);% 对图⽚进⾏命名title('原图');[col,row,color] = size(im);%col为图⽚的⾏数,row为图⽚的列数,color对于彩⾊图⽚⼀般为3,每层对应RGB %利⽤matlab⾃带的函数进⾏ rgb_to_gray;im_matlab = rgb2gray(im);subplot(2,3,1);imshow(im_matlab);title('matlab⾃带rgb2gray');%--------------------------------------------------------%---⽤最⼤值法% 创建⼀个全为1的矩阵,长宽等同于原图的im_max = ones(col,row);for i = 1:1:colfor j = 1:1:rowim_max(i,j) = max( im(i,j,:) );endend% 将矩阵变为8byte⽆符号整型变量(不然⽆法显⽰图⽚)% 最好在计算操作结束后再变化,不然会有精度问题!!im_max = uint8(im_max);subplot(2,3,2);imshow(im_max);title('最⼤值法');%--------------------------------------------------------% 平均值法im_eva = ones(col,row);for i = 1:1:colfor j = 1:1:rowim_eva(i,j) = im(i,j,1)/3 + im(i,j,2)/3 + im(i,j,3)/3 ;% 两种的结果其实⼀样,但是如果先转换为uint8就会出现精度问题%sum1 = im(i,j,1)/3 + im(i,j,2)/3 + im(i,j,3)/3%sum2 = ( im(i,j,1) + im(i,j,2)+ im(i,j,3) )/3;%fprintf( " %.4f %.4f \n",sum1 ,sum2 ) ;endendim_eva = uint8(im_max);subplot(2,3,3);imshow(im_eva);title('平均值法');%--------------------------------------------------------% 加权平均法(rgb2gray所使⽤的权值)im_keyeva = ones(col,row);% 加权算法先转换为uint8计算效果更好im_keyeva = uint8(im_max);for i = 1:1:colfor j = 1:1:rowim_keyeva(i,j) = 0.2989*im(i,j,1) + 0.5870*im(i,j,2) + 0.1140*im(i,j,3) ;endendsubplot(2,3,5);imshow(im_keyeva);title('加权平均法');Processing math: 100%附matlab——rgb2gray源码function I = rgb2gray(X)%RGB2GRAY Convert RGB image or colormap to grayscale.% RGB2GRAY converts RGB images to grayscale by eliminating the% hue and saturation information while retaining the% luminance.%% I = RGB2GRAY(RGB) converts the truecolor image RGB to the% grayscale intensity image I.%% NEWMAP = RGB2GRAY(MAP) returns a grayscale colormap% equivalent to MAP.%% Class Support% -------------% If the input is an RGB image, it can be of any numeric type. The output% image I has the same class as the input image. If the input is a% colormap, the input and output colormaps are both of class double.%% Notes% -----% RGB2GRAY converts RGB values to grayscale values by forming a weighted % sum of the R, G, and B components:%% 0.2989 * R + 0.5870 * G + 0.1140 * B%% The coefficients used to calculate grayscale values in RGB2GRAY are% identical to those used to calculate luminance (E'y) in% Rec.ITU-R BT.601-7 after rounding to 3 decimal places.%% Rec.ITU-R BT.601-7 calculates E'y using the following formula:%% 0.299 * R + 0.587 * G + 0.114 * B%% Example% -------% I = imread('example.tif');%% J = rgb2gray(I);% figure, imshow(I), figure, imshow(J);%% indImage = load('clown');% gmap = rgb2gray(indImage.map);% figure, imshow(indImage.X,indImage.map), figure, imshow(indImage.X,gmap);%% See also RGB2IND, RGB2LIGHTNESS.% Copyright 1992-2020 The MathWorks, Inc.narginchk(1,1);isRGB = parse_inputs(X);if isRGBI = matlab.images.internal.rgb2gray(X);else% Color map% Calculate transformation matrixT = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]);coef = T(1,:);I = X * coef';I = min(max(I,0),1);I = repmat(I, [1 3]);end%--------------------------------------------------------------------------function is3D = parse_inputs(X)is3D = (ndims(X) == 3);if is3D% RGBif (size(X,3) ~= 3)error(message('MATLAB:images:rgb2gray:invalidInputSizeRGB'))end% RGB can be single, double, int8, uint8,% int16, uint16, int32, uint32, int64 or uint64validateattributes(X, {'numeric'}, {}, mfilename, 'RGB');elseif ismatrix(X)% MAPif (size(X,2) ~= 3 || size(X,1) < 1)error(message('MATLAB:images:rgb2gray:invalidSizeForColormap'))end% MAP must be doubleif ~isa(X,'double')error(message('MATLAB:images:rgb2gray:notAValidColormap'))endelseerror(message('MATLAB:images:rgb2gray:invalidInputSize'))end总结通过上⾯的代码结合实际的测试,果然,matlab⾃带的rgb2gray也就是加权平均的⽅法,对光线明暗的处理是最好的。
基于MATLAB的数字图像处理的彩色图像处理
南京信息工程大学滨江学院基于MATLAB的数字图像处理的彩色图像处理专业:电子信工程学生姓名:***指导教师:***完成时间:2022年4月26日摘要自20世纪70年代以来,由于数字技术和计算机技术的迅猛发展,给数字图像处理(Digital Image Processing)提供了先进的技术手段。
图像科学从信息处理、自动控制系统理论、计算机科学、数据通信等学科中脱颖而出,成为研究图像信息的获取、传输、存储、变换、显示、理解和综合利用的新兴学科。
数字图像处理在实际中得到了广泛应用。
特别是在遥感、航空航天、通信、生物和医学、安全监控、工业生产、视频和多媒体、机器人视觉、物理和化学分析、公安和军事等领域.它在国家安全、经济发展和日常生活中已经起到越来越重要的作用。
由于彩色图像提供了比灰度图像更为丰富的信息,因此彩色图像处理正受到人们越来越多的关注。
关键字颜色空间彩色图像分割彩色空间转换彩色变换目录引言 (1)1 MATLAB图像处理工具箱及数字图像处理基本过程简介 (2)1.1 常用图像操作 (2)1.2 图像增强功能 (2)1.3边缘检测和图像分割功能 (3)1,4图像变换功能 (4)2 MATLAB中彩色图像表示 (4)2.1RGB图像 (4)2.2索引图像 (6)2.3处理RGB和索引图像 (6)3 彩色图像处理 (6)3.1读入一幅RGB图像,将其分别转换到CMY空间、HSI空间并显示 (6)3.2彩色空间滤波 (8)参考文献 (9)致谢 (9)引言MATLAB 语言是由美国MathWorks 公司推出的计算机软件,经过多年的逐步发展与不断完善,现已成为国际公认的最优秀的科学计算与数学应用软件之一,是近几年来在国内外广泛流行的一种可视化科学计算软件。
它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境,而且还具有可扩展性特征。
MathWorks 公司针对不同领域的应用,推出了信号处理、控制系统、神经网络、图像处理、小波分析、鲁棒控制、非线性系统控制设计、系统辨识、优化设计、统计分析、财政金融、样条、通信等30 多个具有专门功能的工具箱,这些工具箱是由该领域内的学术水平较高的专家编写的,无需用户自己编写所用的专业基础程序,可直接对工具箱进行运用。
数字图像处理第六章色彩模型与彩色处理课件
Chapter 6 Color Image Processing
6.1 彩色基础
在颜料或着色剂中 ,原色的定义是这样 的:
白:减去一种原色 , 反射或传输另两种 原色。故其原色是: 深红、青、黄。而二 次色是R、G、B。如 图6.4所示。
Chapter 6 Color Image Processing
Chapter 6 Color Image Processing
6.2 彩色模型
6.2.1 RGB彩色模型
下面介绍所谓 全RGB彩色子集。
Chapter 6
Color Image Processing
6.2 彩色模型
Chapter 6 Color Image Processing
6.2 彩色模型
6.3 伪彩色处理
6.3 伪彩色处理 给特定的灰度值赋以彩色。伪彩色的 目的是为了人眼观察和解释图像中的目标。
Chapter 6 Color Image Processing
6.3 伪彩色处理
6.3.1 强度分层
参见图6.18,图像被看成三维函数。
Chapter 6 Color Image Processing
6.3.2 灰度级到 彩色转换
例6.5是一突出 装在行李内的爆炸物 的伪彩色应用。
Chapter 6 Color Image Processing
6.3 伪彩色处理
6.3.2 灰度级到彩 色转换
例6.5是一突出装 在行李内的爆炸物的伪彩 色应用。
Chapter 6 Color Image Processing
6.3 伪彩色处理
Chapter 6 Color Image Processing
6.3 伪彩色处理
数字图像处理——彩色图像实验报告
数字图像处理——彩色图像实验报告第一篇:数字图像处理——彩色图像实验报告6.3实验步骤(1)对彩色图像的表达和显示* * * * * * * * * * * *显示彩色立方体* * * * * * * * * * * * *rgbcube(0,0,10);%从正面观察彩色立方体rgbcube(10,0,10);%从侧面观察彩色立方rgbcube(10,10,10);%从对角线观察彩色立方体%* * * * * * * * * *索引图像的显示和转换* * * * * * * * * f=imread('D:PictureFig0604(a)(iris).tif');figure,imshow(f);%f是RGB真彩图像%rgb图像转换成8色索引图像,不采用抖动方式[X1,map1]=rgb2ind(f,8,'nodither');figure,imshow(X1,map1);%采用抖动方式转换到8色索引图像[X2,map2]=rgb2ind(f,8,'dither');figure,imshow(X2,map2);%显示效果要好一些 g=rgb2gray(f);%f转换为灰度图像g1=dither(g);%将灰色图像经过抖动处理,转换打二值图像figure,imshow(g);%显示灰度图像figure,imshow(g1);%显示抖动处理后的二值图像程序运行结果:*彩色立方体原图不采用抖动方式转换到8色索引图像采用抖动方式转换到8色索引图像灰度图像抖动处理后的二值图像(2)彩色空间转换f=imread('D:PictureFig0604(a)(iris).tif');figure,imshow(f);%转换到NTSC彩色空间%f是RGB真彩图像ntsc_image=rgb2ntsc(f);figure,imshow(ntsc_image(:,:,1));%显示亮度信息figure,imshow(ntsc_image(:,:,2));%显示色差信息figure,imshow(ntsc_image(:,:,3));%显示色差信息%转换到HIS彩色空间hsi_image=rgb2hsi(f);figure,imshow(hsi_image(:,:,1));%显示色度信息figure,imshow(hsi_image(:,:,2));%显示饱和度信息figure,imshow(hsi_image(:,:,3));%显示亮度信息程序运行结果:原图转换到NTSC彩色空间显示亮度信息显示色差信息显示色差信息转换到HIS彩色空间显示色差信息显示饱和度信显示亮度信息(3)彩色变换f=imread('D:PictureFig0614(a)(Chalk Original).tif');G=ice('image',f);%打开ice窗口对图像进行调整%在窗口中执行以下操作:%a)得到图像的补色%b)拖动映射曲线,对图像显示效果进行修改%c)在颜色通道中选中某一颜色,然后对映射曲线进行修改程序运行结果(1):全彩色图片ICE窗口它的补色ICE窗口拖动映射曲线,图像的显示效果ICE窗口f2=imread('D:Picture JLK Magenta.tif');figure,imshow(f2);%在CMYK彩色空间内打开图像选择RedICE窗口g2=ice('image',f2,'space','CMYK');%f2的图像色彩偏红,拖动映射曲线,%调整映射参数,使图像的色彩看起来比较正常。
数字图像处理之彩色图像地处理
实验六彩色图像的处理一、实验目的1、掌握matlab中RGB图像与索引图像、灰度级图像之间转换函数。
2、了解RGB图像与不同颜色空间之间的转换。
3、掌握彩色图像的直方图处理方法。
二、实验内容及步骤1、RGB图像与索引图像、灰度级图像的转换。
close allRGB=imread('flowers.tif');[R_i,map]=rgb2ind(RGB,8);%RGB图像转换为8色的索引图像figureimshow(R_i,map)[R_g]=rgb2gray(RGB);%RGB图像转换为灰度级图像figureimshow(R_g)思考:将RGB 图像’flowers.tif ’分别转换为32色、256色、1024色索引图像,是否调色板所表示的颜色值越多图像越好?close allRGB=imread('flowers.tif');[R_i1,map]=rgb2ind(RGB,8);%RGB图像转换为8色的索引图像[R_i2,map]=rgb2ind(RGB,32);%RGB图像转换为32色的索引图像[R_i3,map]=rgb2ind(RGB,256);%RGB图像转换为256色的索引图像[R_i4,map]=rgb2ind(RGB,1024);%RGB图像转换为1024色的索引图像Subplot(221);imshow(R_i1,map);title('8色的索引图像');Subplot(222);imshow(R_i2,map);title('32色的索引图像');Subplot(223);imshow(R_i3,map);title('256色的索引图像');Subplot(224);imshow(R_i4,map);title('1024色的索引图像');结论:随着索引值的增加图像的质量也有增加,更加清晰,色彩也更加鲜明。
[课件]冈萨雷斯数字图像处理第五章彩色图像处理PPT
X11 X12 X X22 21 X Xm1 Xm2
X1n X2n Xmnmn
r1 r 2 map ri rL
g1 g2 gi gL
b1 b2 bi bL L3
256×256×256=16 777 216≈1670万种颜色。 这足以表示自然界的任一颜色,故又称其为 24位真彩色。
第五章 彩色图象处理
• 一幅图像中的每一个像素点均被赋予不同的RGB值,
便可以形成真彩色图像,如红色(255,0,0)、绿色(0, 255,0)、蓝色(0,0,255)、青色(0,255,255)、品红 (255,0,255)、黄色(255,255,0)、白色(255,255, 255)、黑色(0,0,0)等,等比例混合三基色产生的是 灰色。 RGB颜色模型可用一个三维空间中的单位立方体 来表示,如图所示。
第五章 彩色图象处理
索引图像X与对应示意图
r1 r2 . . rk . . rL X
g1 b1 g2 b2 . . . . gk bk . . . . gL bL map
圆圈圈过的元素之值=k-1(X为uint8 uint16)
第五章 彩色图象处理 索引图像文件的读取 – [X, map] = imread(filename, fmt) – [X, map] = imread( filename, fmt ) reads the indexed image in filename into X and its associated colormap into map. The colormap values are rescaled to the range [0,1]. 索引图像的显示 – imshow(X, map) 或 – image(X) – colormap(map)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理----彩色图像处理杨淑莹教授天津理工大学计算机与通信工程学院彩色图像处理彩色图像的灰度化处理 彩色图像马赛克处理 彩色图像的浮雕处理彩色图像的灰度化处理1. 理论分析(1) BMP位图文件类型(2) 24位真彩色图像文件结构(3) 彩色图像的灰度化处理方法2. 理论验证(1)UltraEdit软件对真彩色文件数据剖析(2) 教学软件验证3. 实现步骤4. 编程代码(1) CDib类库的建立(2) CDib派生类的建立----彩色图像处理(3) 灰度化处理代码1.24位真彩色图像(1)每一像素由RGB三个分量组成。
(2)每个分量各占8位,取值范围为0~255,每个像素24位。
(207,137,130) (220,179,163) (215,169,161) (210,179,172) (210,179,172) (207,154,146) (217,124,121) (215,169,161) (216,179,170) (216,179,170) (207,137,120) (159, 51, 71) (213,142,135) (216,179,170) (221,184,170) (190, 89, 89) (204,109,113) (204,115,118) (216,179,170) (220,188,176) (190, 77, 84) (206, 95, 97) (217,113,113) (189, 85, 97) (222,192,179) (150, 54, 71) (177, 65, 73) (145, 39, 65) (150, 47, 67) (112, 20, 56)(136, 38, 65) (112, 20, 56) (112, 20, 56) (109, 30, 65) (112, 20, 56) ( 95, 19, 64)(136, 38, 65) ( 91, 11, 56) (113, 25, 60) (103, 19, 59) ( 81, 12, 59) (126, 62, 94)(138, 46, 71) (103, 19, 59) (158, 65, 83) (124, 40, 70) (145, 62, 79) (130, 46, 73)2.理论分析--24位真彩色图像文件结构位图像素数据位图信息头结构BITMAPINFOHEADER 位图文件头结构BITMAPFILEHEADER 位图像素数据颜色表位图信息头结构BITMAPINFOHEADER位图文件头结构BITMAPFILEHEADER8位位图文件结构24位位图文件结构1)BMP文件头结构typedef struct tagBITMAPFILEHEADER{WORD bfType; // BM,2byteDWORD bfSize;// 文件大小,4byteWORD bfReserved1;// 0WORD bfReserved2;// 0DWORD bfOffBits; // 位图数据的起始位置,}TMAPFILEHEADER;//(14byte)2)位图信息头结构typedef struct tagBITMAPINFOHEADER{DWORD biSize; // biSize=40byteLONG biWidth;LONG biHeight;WORD biPlanes; // 1WORD biBitCount;// 每个像素所需的位数,24 DWORD biCompression; // 位图压缩类型,0DWORD biSizeImage; // 位图的大小,LONG biXPelsPerMeter; // 0LONG biYPelsPerMeter; // 0DWORD biClrUsed; // 颜色数0DWORD biClrImportant; // 重要的颜色数0} BITMAPINFOHEADER;3)位图像素数据(207,137,130) (220,179,163) (215,169,161) (210,179,172) (210,179,172) (207,154,146) (217,124,121) (215,169,161) (216,179,170) (216,179,170) (207,137,120) (159, 51, 71) (213,142,135) (216,179,170) (221,184,170) (190, 89, 89) (204,109,113) (204,115,118) (216,179,170) (220,188,176) (190, 77, 84) (206, 95, 97) (217,113,113) (189, 85, 97) (222,192,179) (150, 54, 71) (177, 65, 73) (145, 39, 65) (150, 47, 67) (112, 20, 56) (136, 38, 65) (112, 20, 56) (112, 20, 56) (109, 30, 65) (112, 20, 56) ( 95, 19, 64) (136, 38, 65) ( 91, 11, 56) (113, 25, 60) (103, 19, 59) ( 81, 12, 59) (126, 62, 94) (138, 46, 71) (103, 19, 59) (158, 65, 83) (124, 40, 70) (145, 62, 79) (130, 46, 73)1.理论分析--彩色图像的灰度化处理使颜色的R、G、B分量值相等。
灰度化处理方法:¾三个分量取最大值、¾三个分量取最小值、¾三个分量取算术平均值、¾三个分量取Gray(i,j)=0.11*R(i,j)+0.59*G(i,j)+0.3*B(i,j)2.理论验证(1)UltraEdit软件对数据文件剖析(2) 教学软件验证2.理论验证----UltraEdit数据剖析BITMAPFILEHEADER1个像素的真彩色文件BITMAPINFOHEADER2.理论验证---教学软件验证3.实现步骤(1) 打开图像文件,装载数据到内存;(2) 取得图像的数据区指针,得到蓝、绿、红三个分值;(3) 将蓝、绿、红三个值作比较,取得最大值;(4) 将最大颜色值返回给蓝、绿、红三个分量;(5) 显示图像。
获得文件路径名打开位图文件读取BITMAPFILEHEADER结构读取BITMAPINFOHEADER 结构得到位图大小,分配内存空间BMP 格式?开始获得数据的起始位置,保存起始位置指针结束打开文件流程4.编程代码----CDib类库的建立1)基本操作功能①文件的读出、写入操作;②提供位图宽度、高度、颜色数目等信息;③提供位图占据内存空间的信息。
数据区首地址、颜色表首地址、位图信息结构首地址等。
4.编程代码----CDib类数据定义public:BYTE * m_pData;RGBQUAD * m_pRGB;UINT m_numberOfColors;BITMAPFILEHEADER bitmapFileHeader;BITMAPINFOHEADER * m_pBitmapInfoHeader;BITMAPINFO * m_pBitmapInfo;BYTE * pDib;DWORD size;4.编程代码----CDib类函数功能void LoadFile(CString m_fileName); ----装载BMP位图文件BOOL SaveFile(const char *pszFilename);----存储BMP位图文件char* GetFileName(); ----------------------返回位图文件名DWORD GetSize();---------------------------返回位图文件的大小UINT GetWidth();---------------------------返回位图的宽度UINT GetHeight();--------------------------返回位图的高度UINT GetNumberOfColors();------------------返回位图颜色数目RGBQUAD* GetRGB();-------------------------返回颜色表首地址BITMAPINFO* GetInfo();---------------------返回图像信息结构首地址BYTE* GetData();---------------------------返回图像数据首地址4.编程代码----LoadFile()功能简介CFile dibFile;dibFile.Read(&bitmapFileHeader,)位图文件头结构BITMAPFILEHEADER size = fileLength -sizeof(BITMAPFILEHEADER)pDib = GlobalAllocPtr(GMEM_MOVEABLE, size )m_pData =pDib+m_pBitmapInfoHeader->biSize+colorTableSize 位图像素数据m_pData m_pRGB = (RGBQUAD*)(pDib+m_pBitmapInfoHeader ->biSize);颜色表m_pRGB m_pBitmapInfoHeader ->biSize =40字节位图信息头结构BITMAPINFOHEADERpDib 位图像素数据m_pData 位图信息头结构BITMAPINFOHEADER pDib4.编程代码----彩色图像处理派生类1) CDib派生类作用(1)具有CDib类的保护或公有成员功能。
对基类中的保护或公有成员可以直接使用,不需要声明。
(2)在派生类中定义各种处理函数。
扩充了一些功能,这些功能随处理算法的不同而不同,结构简洁。
4.编程代码----CDib派生类#include "Cdib.h"class MakeColorDib: public CDib{ public:void MakegGray();void Mosaic();void Sharp();void PaintColor(int m_Red,int m_Green,int m_Blue);void ContrastAlter(int m_Increment);void LightReverse();MakeColorDib();virtual ~MakeColorDib();};4.编程代码----灰度化处理代码void MakeColorDib::MakegGray(){BYTE *p_data; //原图数据区指针int wide,height,DibWidth,gray; //原图长、宽、字节宽p_data=this->GetData(); //取得原图的数据区指针wide=this->GetWidth(); //取得原图的数据区宽度height=this->GetHeight(); //取得原图的数据区高度DibWidth=this->GetDibWidthBytes(); //取得数据区字节数for(int j=0;j<height;j++)// 每行for(int i=0;i<DibWidth;i+=3)// 每列{BYTE* pbyBlue= p_data++; //得到蓝色值BYTE* pbyGreen= p_data++; //得到绿色值BYTE* pbyRed= p_data++; //得到红色值BYTE r = * p_data++;BYTE g = * p_data++;BYTE b = * p_data++;if(r>g)gray=r;else gray=g;if(gray<b)gray=b;*pbyBlue= gray; //将最大值赋给蓝分量*pbyGreen= gray; //将最大值赋给绿分量*pbyRed= gray; //将最大值赋给红分量}}彩色图像马赛克处理1. 理论基础将图像从形式上划分为很多小块,在每块内的各个像素都取到相同的红、绿、蓝颜色值,从而对某些细节进行模糊化处理,使图像粗糙化。