DSP原理及图像处理应用第8章 彩色图像转化成灰度图像1
利用DSP实现图像的灰度处理
实验17、利用DSP 实现图像的灰度处理一、 实验目的1. 了解图像灰度处理基本原理和方法。
2. 熟悉视频采集与显示的运行过程。
3. 掌握图像数据在内存中的存储方式,掌握内存地址与屏幕坐标的对应关系。
4. 掌握利用DM642实现图像的灰度处理的方法。
二、 实验内容在实验16的基础上,自行设计图像灰度处理的算法程序,加入到视频显示程序中。
要求实现灰度显示的区域为一个带黑框的矩形部分,该矩形在显示器屏幕中的位置为:X 坐标范围(190~530),Y 坐标范围(118~458);黑色边框为6个像素宽度。
如图1所示。
图1 视频显示示意图 三、实验原理1.灰度处理算法灰度图(Gray-scale Image )是指将图像按照灰度等级的数目来划分后形成的图像。
灰度模式最多使用256级灰度来表现图像,图像中的每一个像素有一个0~255之间的亮度值,0表示黑色,255表示白色。
在RGB 色彩空间中,当R 、G 、B 各分量相等时,即呈现为灰度图。
对YUV 编码的图像来说,转换为RGB 的表达式如下:R=Y+1.370705*(V-0.5)G=Y-0.698001*(V-0.5)-0.337633*(U-0.5)灰度显示区域 X Y184 184 112 112(719,575)彩色显示区域 6B=Y+1.732446*(U-0.5)从上式可以很容易得到,当V=U=0.5时,R=G=B。
由于本实验中Y、U、V采用8位无符号数格式,所以0.5转换为8位无符号数格式即为128(0x80)。
因此,对YUV图像来说,将Cb、Cr分量设置为0x80,Y分量保留,即能实现灰度图。
2.数据在内存中的存放为了保证DSP的数据处理速度,我们应在内存中开辟三个数据缓冲区:采集缓冲区、数据处理缓冲区、显示缓冲区。
我们在主程序中已经定义了这三个数据缓冲区,每个缓冲区的大小均为一帧图像的大小(720*576,每帧576行,每行720个像素)。
彩色灰度转换原理
彩色灰度转换原理彩色灰度转换是一种将彩色图像转换为灰度图像的技术。
在计算机图像处理中,彩色图像由红、绿、蓝三个颜色通道组成,每个通道的像素值表示对应颜色的强度。
而灰度图像只有一个通道,每个像素值表示灰度的强度,即黑白图像。
彩色灰度转换的原理是通过将彩色图像的三个颜色通道的像素值加权求和,得到对应像素的灰度值。
常用的加权求和方法是将红、绿、蓝三个颜色通道的像素值按照一定的权重相加,得到灰度图像的像素值。
一种常用的加权求和方法是将红、绿、蓝三个颜色通道的像素值按照不同的权重相加,得到灰度图像的像素值。
常用的加权方法是将红色通道的权重设为0.299、绿色通道的权重设为0.587、蓝色通道的权重设为0.114。
这是因为人眼对不同颜色的敏感度是不同的,对绿色最敏感,对红色次之,对蓝色最不敏感。
通过按照不同的权重相加,可以更好地反映人眼对图像的感知。
彩色灰度转换的过程可以通过以下步骤进行:1. 加载彩色图像:首先,需要将彩色图像加载到计算机内存中。
彩色图像可以是常见的图像格式,如JPEG、PNG等。
2. 分离颜色通道:将彩色图像的红、绿、蓝三个颜色通道分离出来,得到三个单独的通道图像。
3. 加权求和:对于每个通道图像的对应像素,按照设定的权重进行加权求和,得到灰度图像的对应像素值。
4. 合并通道:将灰度图像的三个通道合并为一个通道,得到最终的灰度图像。
通过彩色灰度转换,可以将彩色图像转换为灰度图像,简化了图像处理的复杂度。
灰度图像具有更低的存储需求和计算复杂度,使得图像处理算法更加高效。
此外,灰度图像在一些特定应用中也具有重要的作用,如图像识别、图像压缩等。
总结起来,彩色灰度转换是通过将彩色图像的颜色通道加权求和,得到灰度图像的过程。
通过合理选择权重,可以更好地反映人眼对图像的感知。
彩色灰度转换简化了图像处理的复杂度,并在一些应用中发挥重要作用。
[数字图像处理](一)彩色图像转灰度图像的三种方式与效果分析
[数字图像处理](⼀)彩⾊图像转灰度图像的三种⽅式与效果分析图像处理(⼀)彩⾊图⽚转灰度图⽚三种实现⽅式最⼤值法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也就是加权平均的⽅法,对光线明暗的处理是最好的。
DSP原理及图像处理应用第8章 彩色图像转化成灰度图像1
1651 2
8cc0 0
36864
习
题
1.简述RGB彩色图像转化为灰度图像的三种方 法。 2.利用DSP试验箱,对RGB彩色图像转化为灰 度图像的三种方法进行仿真,比较试验结果,并 分析它们的优缺点。 3.查阅相关资料,写出RGB颜色空间与YUV颜 色空间的相互转化公式。
三、程序流程图
以“加权平均法”为例, 流程图如右图所示。
四、 C语言代码与分析
void RGB2Gray ( unsigned char *R, /* 输入彩色图像的R分量 */ unsigned char *G /* 输入彩色图像的G分量 */ unsigned char *B, /* 输入彩色图像的B分量 */ unsigned char *Gray, /* 输出的灰度图像 */ int cols, int rows, /* 图像的宽度与高度 */ ) { int i; //定义局部变量 //采用循环的方式对图像中的每个像素进行灰度化 for (i = 0; i < cols*rows; i++) { //方法1: 加权平均法 *Gray++=0.3*(*R++)+ 0.59*(*G++)+ 0.11*(*B++); } }
) {
/* 图像的宽度与高度
*/
int i; //定义局部变量
//为待生成的灰度图像分配空间 Gray = (unsigned char *)calloc(cols*rows, sizeof(unsigned char));
//采用循环的方式对图像中的每个像素进行灰度化
for (i = 0; i < cols*rows; i++) *Gray++=*Y++;
彩色图像灰度化
摘要图像处理是一门很有价值的学科,在科学技术不断发展的今天它的技术已趋于成熟。
同时图像之间的处理, 在实际应用中也显的越来越重要。
本课程设计的主要任务是完成数字图像处理中关于彩色图像灰度化的仿真,观察仿真结果,并进行结果分析。
本课程设计的系统开发平台为MATLAB,程序运行平台为Windows98/2000/XP。
本次课程设计通过加权平均法、平均值法和最大值法这三种方法,实现了彩色图像的灰度化处理,并对它们进行了对比分析。
最后,完成了彩色图像灰度化的仿真。
关键词: MATLAB7.0;彩色图像;灰度化目录1设计目的 (1)2设计方案 (1)3相关知识 (2)4 详细设计 (3)5 源代码及分析 (4)6 功能仿真图及分析 (6)7结束语 (11)8参考文献 (12)附录彩页图像 (13)1设计目的1、通过MATLAB仿真软件,实现彩色图像的灰度化处理;2、学习并熟悉MATLAB编程环境的一般操作和运用;3、在加深对数字图像处理课本知识理解的基础上,学会运用已学的知识设计彩色图像灰度化的处理方法并对结果进行分析。
2设计方案将彩色图像转化成为灰度图像的过程称为图像的灰度化处理。
彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255个中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。
而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其中一个像素点的变化范围为255种,所以在数字图像处理中一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。
灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。
在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫做灰度值。
因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。
图像的灰度化处理,一般有以下三种设计方案:1、加权平均法根据重要性及其它指标,将三个分量以不同的权值进行加权平均。
彩色图像与灰度图像之间的转换
彩⾊图像与灰度图像之间的转换⼀.彩⾊图像简介在RGB⾊彩空间,图像深度与⾊彩的映射关系主要有真彩⾊、伪彩⾊和调配⾊。
真彩⾊是指在组成⼀幅彩⾊图像的每个像素值中,有R,G,B三个基⾊分量,每个基⾊分量直接决定显⽰设备的基⾊强度,这样产⽣的彩⾊称为真彩⾊,是真实的原图彩⾊。
伪彩⾊图像的每个像素值实际上是⼀个索引值或代码,该代码值作为⾊彩查找表CLUT中某⼀项的⼊⼝地址,根据该地址可查找出包含实际R,G,B的强度值。
这种⽤查找映射的⽅法产⽣的⾊彩称为伪彩⾊。
⾊彩查找表CLUT是⼀个事先做好的表,表项⼊⼝地址也称为索引号。
彩⾊图像本⾝的像素数值和⾊彩查找表的索引号有⼀种变换关系,这种关系可以是系统定义的,也可以是⽤户⾃⼰定义的变换关系。
使⽤查找得到的数值显⽰的彩⾊是真的,可⼜不是图像本⾝的颜⾊,因为其没有完全反映原图的彩⾊,所以称其为伪彩⾊。
调配⾊的获取是通过每个像素点的R,G,B分量分别作为单独的索引值进⾏变换,经相应的⾊彩查找表找出各⾃的基⾊强度,⽤变换后的R,G,B强度值产⽣⾊彩。
⼆.灰度图像简介灰度是描述灰度图像内容的最直接的视觉特征。
它指⿊⽩图像中点的颜⾊深度,范围⼀般从0到255,⽩⾊为255,⿊⾊为0,故⿊⽩图像也称灰度图像。
灰度图像矩阵元素的取值通常为[0,255],因此其数据类型⼀般为8位⽆符号整数,这就是⼈们通常所说的256级灰度。
三.彩⾊图像转化为灰度图像彩⾊图像转换为灰度图像时,需要计算图像中每个像素有效的亮度值,其计算公式为:Y = 0.3R + 0.59G + 0.11B代码如下:clear all;close all;I = imread('lenna.png');[M N H] = size(I);I2 = zeros(M, N);for x = 1 : Mfor y = 1 : NA = double([I(x, y, 1) I(x, y, 2) I(x, y, 3)]);B = [0.3; 0.59; 0.11];[gray] = A * B; % 计算灰度值I2(x, y) = gray;endendimshow(uint8(I2));四.灰度图像转换为彩⾊图像将灰度图像转换为彩⾊图像,称为灰度图像的伪彩⾊处理。
基于DSP的图像灰度化处理方法研究
目录摘要 (1)第一章绪论 (3)1.1论文研究背景与意义 (3)1.2国内外的研究现状 (3)1.3本文结构 (4)第二章图像灰度化的原理及MATLB仿真 (5)2.1引言 (5)2.2图像灰度化处理的基本原理与方法 (5)2.2.1RGB彩色图像转化灰度图像的原理与方法 (5)2.3基于MATLAB的仿真 (8)2.3.1MATLAB的简介 (8)2.3.2仿真结果及其分析 (8)第三章基于DSP的图像处理实现 (12)3.1引言 (12)3.2DSP系统平台与开发环境CCS简介 (12)3.3图像基于DSP的实现及结果分析 (13)3.4图像基于不同平台的比较分析 (16)第四章结论 (16)参考文献 (18)附录 (19)致谢 (23)摘要彩色图像的灰度化是图像处理的一个基本方法,在图像检测与识别、图像分析与处理等领域有着广泛的应用,把采集来的彩色图像进行灰度化处理,这样既可以提高后续算法速度,而且可以提高系统综合应用实效,达到更为理想的要求。
DSP强大的信号处理能力为实时图像信息处理提供了应用基础。
随着信息技术的高速发展,DSP在图形图像领域方面的应用越加广泛,如图形变换、图像压缩、图像传输、图像增强、图像识别等。
本文正是在研究基于DSP进行图像灰度化处理的过程中,首先基于不同颜色模型,即RGB与YUV模型分别进行图像分析,然后对图像灰度化处理的原理与方法进行了研究(本文重点研究的是图像的线性灰度变换),由于RGB与YUV模型在灰度化处理中原理相同,所以本文重点对RGB模型进行软件仿真。
在MATLAB软件环境中实现了对RGB彩色模型的仿真的基础上,又在DSP处理平台上完成程序设计,给出实验结果,并与MATLAB仿真结果相比较进行分析。
本文通过分量法、加权平均法、平均值法和最大值法这四种方法,依次对实现了彩色图像的灰度化处理,并对它们进行了对比分析。
最后,完成了彩色图像灰度化的仿真,由于MATLAB仿真结果与CCS处理结果十分接近,从而实现了此次研究的目的。
将一幅图像转换为灰度图
方法一:对于彩色转灰度,有一个很著名的心理学公式:Gray = R*0.299 + G*0.587 + B*0.114方法二:而实际应用时,希望避免低速的浮点运算,所以需要整数算法。
注意到系数都是3位精度的没有,我们可以将它们缩放1000倍来实现整数运算算法:Gray = (R*299 + G*587 + B*114 + 500) / 1000RGB一般是8位精度,现在缩放1000倍,所以上面的运算是32位整型的运算。
注意后面那个除法是整数除法,所以需要加上500来实现四舍五入。
就是由于该算法需要32位运算,所以该公式的另一个变种很流行:Gray = (R*30 + G*59 + B*11 + 50) / 100方法三:上面的整数算法已经很快了,但是有一点仍制约速度,就是最后的那个除法。
移位比除法快多了,所以可以将系数缩放成2的整数幂。
习惯上使用16位精度,2的16次幂是65536,所以这样计算系数:0.299 * 65536 = 19595.264 ≈ 195950.587 * 65536 + (0.264) = 38469.632 + 0.264 = 38469.896 ≈ 384690.114 * 65536 + (0.896) = 7471.104 + 0.896 = 7472可能很多人看见了,我所使用的舍入方式不是四舍五入。
四舍五入会有较大的误差,应该将以前的计算结果的误差一起计算进去,舍入方式是去尾法:写成表达式是:Gray = (R*19595 + G*38469 + B*7472) >> 162至20位精度的系数:Gray = (R*1 + G*2 + B*1) >> 2Gray = (R*2 + G*5 + B*1) >> 3Gray = (R*4 + G*10 + B*2) >> 4Gray = (R*9 + G*19 + B*4) >> 5Gray = (R*19 + G*37 + B*8) >> 6Gray = (R*38 + G*75 + B*15) >> 7Gray = (R*76 + G*150 + B*30) >> 8Gray = (R*153 + G*300 + B*59) >> 9Gray = (R*306 + G*601 + B*117) >> 10Gray = (R*612 + G*1202 + B*234) >> 11Gray = (R*1224 + G*2405 + B*467) >> 12Gray = (R*2449 + G*4809 + B*934) >> 13Gray = (R*4898 + G*9618 + B*1868) >> 14Gray = (R*9797 + G*19235 + B*3736) >> 15Gray = (R*19595 + G*38469 + B*7472) >> 16Gray = (R*39190 + G*76939 + B*14943) >> 17Gray = (R*78381 + G*153878 + B*29885) >> 18Gray = (R*156762 + G*307757 + B*59769) >> 19Gray = (R*313524 + G*615514 + B*119538) >> 20仔细观察上面的表格,这些精度实际上是一样的:3与4、7与8、10与11、13与14、19与20所以16位运算下最好的计算公式是使用7位精度,比先前那个系数缩放100倍的精度高,而且速度快:Gray = (R*38 + G*75 + B*15) >> 7其实最有意思的还是那个2位精度的,完全可以移位优化:Gray = (R + (WORD)G<<1 + B) >> 2将一幅图像转换为灰度图灰度图是指用灰度表示的图像,灰度是在白色和黑色之间分的若干个等级,其中最常用的是256级,也就是256级灰度图。
将一幅图像转换为灰度图
ToGray(srcFiuse");
return 0;
}
int bitCount = bmiHeader.biBitCount;
if (bitCount == 16)
{
exit(-1);
}
double byteCount = (double)bitCount / 8;
int nClr = 0;
if (bitCount < 16)
{
nClr = bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 << bitCount;
{
fread(&srcBuf[lineSize * i],lineSize,1,pFile);
fseek(pFile,alignBytes,SEEK_CUR);
}
//256色位图调色板
RGBQUAD *quadDes = NULL;
quadDes = new RGBQUAD[256];
for (i = 0; i < 256; i++)
#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <math.h>
#include <windows.h>
using namespace std;
//将位图转换为256色灰度图
void ToGray(const string& srcFile,const string& desFile)
灰度化原理
灰度化原理灰度化是数字图像处理中的一个重要步骤,它将彩色或者黑白图像转换为灰度图像,方便进行后续分析和处理。
灰度化操作将图像中每个像素的RGB值转换为一个灰度值,使得每个像素只有一个数值,从而简化了图像的复杂度。
灰度化原理主要可以分为两种方法:亮度平均法和加权平均法。
亮度平均法是指将图像中每个像素的RGB值的平均值作为该像素的灰度值。
对于彩色图像,每个像素有R、G、B三个分量,而灰度图像只需要一个灰度值,因此需要将这三个分量合并成一个亮度值。
具体的计算公式是:灰度值 = (R + G + B) / 3这种方法的优点是简单易懂,计算速度快;但缺点是没有考虑到每个颜色通道的重要性,可能会对图像的质量造成影响。
1. 亮度加权平均法该方法根据每个颜色通道所表达的亮度值来计算灰度值。
由于人眼对于绿色通道的亮度最为敏感,因此绿色通道的权重最高,而红色和蓝色通道的权重相对较低。
具体的计算公式是:灰度值 = 0.299R + 0.587G + 0.114B2. 最大值法该方法将每个颜色通道中的最大值作为该像素的灰度值。
由于对比度较强,能够突出图像中的主要内容,因此常用于图像边缘检测中。
具体的计算公式是:3. 平均值法该方法将每个颜色通道的值平均后作为该像素的灰度值。
由于不考虑每个通道的权重,所以计算简单,但会对图像的质量造成一定影响。
具体的计算公式是:灰度化原理是将彩色或者黑白图像转换为灰度图像,该操作主要分为亮度平均法和加权平均法两种方法。
加权平均法根据颜色通道的重要性来计算灰度值,可以提高图像的质量。
根据实际需求选择合适的灰度化方法,可以有效提高图像处理的效率和精度。
除了上文提到的灰度化计算方法之外,还有一些其他的方法,例如分色灰度法、伽马变换灰度化、局部灰度化等。
分色灰度法是指将图像的每个颜色通道分别进行灰度化,然后取这些灰度值的平均值作为该像素的灰度值。
该方法可以保留原图像中不同颜色通道的信息,能够更好地呈现图像的色彩和纹理。
实验2、利用DSP实现图像的灰度处理S
实验二利用DSP实现图像的灰度处理一、实验目的实验一“DSP图像采集与传输”工程已经给出了完整的图像采集与显示程序,介绍了将模拟图像采集为数字图像并进行显示的方法,以及DSP系统各硬件资源和功能模块的作用。
本实验重点是利用DSP C语言实现图像的灰度处理,通过该实验,掌握利用DSP进行图像灰度处理的方法,掌握TMS320C6000 CSL库的使用和编程。
1.了解图像灰度处理基本原理和方法。
2.了解利用Matlab实现图像的灰度处理的方法。
3.掌握TMS320C6000 CSL库的使用。
4.掌握利用DM642实现图像的灰度处理的方法。
二、实验原理常用的色彩空间有RGB和YUV色彩空间。
采用RGB编码方法,每种颜色都可用三个变量来表示—红色、绿色以及蓝色的强度。
它缺乏与早期黑白显示系统的良好兼容性,因此很多厂商经常将RGB转换成YUV颜色空间,处理完成再根据需要换回RGB格式,以便在计算机上显示彩色图形。
YUV主要用于优化彩色视频信号的传输,可兼容早期的黑白显示系统。
与RGB视频信号传输相比,YUV只需占用极少的带宽,因为RGB要求三个独立的视频信号同时传输。
YCbCr是YUV的一个特例。
Y是亮度值信号,Cb、Cr是色差信号。
图像处理与传输中,只传输和存储Y和Cb、Cr值,而且Cb和Cr的分辨率可以比Y低。
这就减少了表示图像的数据量。
色度采用比亮度低的分辨率进行采样是一种简单而有效的压缩办法。
这两种色彩空间可以按照如下公式相互转换。
YUV与RGB相互转换的公式如下(RGB 取值范围均为0~255):Y = 0.299R + 0.587G + 0.114BU = -0.1687R - 0.3313G + 0.5B + 128V = 0.5R - 0.4187G - 0.813B + 128 (7.2.1) 和R = Y + 1.402 (V-128)G = Y - 0.34414 (U-128) - 0.71414 (V-128)B = Y + 1.772 (U-128) (7.2.2)如果将一个YUV图像转换为灰度图像,可以将U和V分量设置为0,同时保持Y不变就可以了。
OprenCV学习之路一:将彩色图片转换成灰度图
OprenCV学习之路⼀:将彩⾊图⽚转换成灰度图//将⼀张彩⾊图⽚转成灰度图;////////////////////////////#include<cv.h>#include<cvaux.h>#include<highgui.h>#include<ml.h>#include<iostream>using namespace std;using namespace cv;int main(){IplImage *src=0;src=cvLoadImage("G:/1.jpg",1);IplImage *img1=cvCreateImage(cvGetSize(src),8,1);IplImage *img2=cvCreateImage(cvGetSize(src),8,1);cvCvtColor(src,img1,CV_BGR2GRAY);for(int i=0;i<src->height;i++){for(int j=0;j<src->width;j++){((uchar*)(img2->imageData+i*img2->widthStep))[j]=((uchar *)(src->imageData+i*src->widthStep))[j*src->nChannels+0]*0.114+((uchar *)(src->imageData+i*src->widthStep))[j*src->nChannels+0]*0.587+((uchar *)(src->imageData+i*src->widthStep))[j*src->nChannels+0]*0.299;}}cvNamedWindow("src",1);cvShowImage("src",src);cvNamedWindow("img1",1);cvShowImage("img1",img1);cvNamedWindow("img2",1);cvShowImage("img2",img2);cvWaitKey(0);cvDestroyWindow("src");cvDestroyWindow("img1");cvDestroyWindow("img2");return 0;}主要采⽤两种⽅式将彩⾊图⽚转换成灰度图,⼀种是直接利⽤Opencv⾃带的cvCvtColor函数进⾏转换,另⼀种是直接对像素进⾏处理。
彩色图像转灰度图像
彩色图像转灰度图像L=imread('i:\1.jpg')L=double(L);Xrgb=0.2990*L(:,:,1)+0.5870*L(:,:,2)+0.1140*L(:,:,3); NbColors=255;X=wcodemat(Xrgb,NbColors);map1=gray(NbColors);image(X);colormap(map1);title('原图像的灰度图');小波压缩-低频信息保留压缩方式L=imread('i:\1.jpg')L=double(L);Xrgb=0.2990*L(:,:,1)+0.5870*L(:,:,2)+0.1140*L(:,:,3); NbColors=255;X=wcodemat(Xrgb,NbColors);map1=gray(NbColors);image(X);colormap(map1);title('原图像的灰度图');axis square;disp('灰度图像X的大小');whos('X')[c,s]=wavedec2(X,2,'bior3.7');ca1=appcoef2(c,s,'bior3.7',1);ch1=detcoef2('h',c,s,1);%水平方向cv1=detcoef2('v',c,s,1);%垂直方向cd1=detcoef2('d',c,s,1);%斜线方向a1=wrcoef2('a',c,s,'bior3.7',1);h1=wrcoef2('h',c,s,'bior3.7',1);v1=wrcoef2('v',c,s,'bior3.7',1);d1=wrcoef2('d',c,s,'bior3.7',1);%各频率成分重构c1=[a1,h1;v1,d1];image(c1);colormap(gray);axis square;title('分解后低频和高频信息');ca1=appcoef2(c,s,'bior3.7',1);ca1=wcodemat(ca1,440,'mat',0);ca1=0.5*ca1;disp('第一次压缩后图像的大小为:');image(ca1);colormap(gray);%colormap(map);axis square;title('第一次压缩图像');whos('ca1')ca2=appcoef2(c,s,'bior3.7',2);ca2=0.25*ca2;image(ca2);colormap(gray);%colormap(map);axis square;title('第二次压缩图像');disp('第二次压缩后图像大小为:');whos('ca2')灰度图像X 的大小Name Size Bytes ClassX 150x125 150000 double arrayGrand total is 18750 elements using 150000 bytes第一次压缩后图像的大小为:Name Size Bytes Classca1 82x70 45920 double array Grand total is 5740 elements using 45920 bytes第二次压缩后图像大小为:Name Size Bytes Classca2 48x42 16128 double array Grand total is 2016 elements using 16128 bytes二维小波压缩H=imread('i:\1.jpg')H=double(H);Grgb=0.2990*H(:,:,1)+0.5870*H(:,:,2)+0.1140*H(:,:,3); NbColors=255;G=wcodemat(Grgb,NbColors);map2=gray(NbColors);figure(4);image(G);colormap(map2);title('原图像的灰度图');%转换成为灰度级索引图像[CA1,CH1,CV1,CD1]=dwt2(G,'bior3.7');%从分解系数中提取近似和细节[CA1,CH1,CV1,CD1]=dwt2(G,'bior3.7');A1=upcoef2('a',CA1,'bior3.7',1);H1=upcoef2('h',CH1,'bior3.7',1);V1=upcoef2('v',CV1,'bior3.7',1);D1=upcoef2('d',CD1,'bior3.7',1);%显示近似和细节%figure (' name ','近似分量A1');colormap(map2);subplot(2,2,1);image(wcodemat(A1,192));title('近似A1');subplot(2,2,2);image(wcodemat(H1,192));title('水平细节H1');subplot(2,2,3);image(wcodemat(V1,192));title('垂直细节V1');subplot(2,2,4);image(wcodemat(D1,192));title('对角细节D1');%对图像进行多尺度分解[C,S]=wavedec2(G,2,'bior3.7');%提取分解后的近似和细节系数CA2=appcoef2(C,S,'bior3.7',2);[CH2,CV2,CD2]=detcoef2('all',C,S,2);[CH1,CV1,CD1]=detcoef2('all',C,S,2);%从系数C重构第二层近似A2=wrcoef2('a',C,S,'bior3.7',2);H1=wrcoef2('h',C,S,'bior3.7',1);V1=wrcoef2('v',C,S,'bior3.7',1);D1=wrcoef2('d',C,S,'bior3.7',1);H2=wrcoef2('h',C,S,'bior3.7',2);V2=wrcoef2('v',C,S,'bior3.7',2);D2=wrcoef2('d',C,S,'bior3.7',2);%显示多尺度分解的结果%figure (' name ','多尺度分解后的近似与细节'); colormap(map2);subplot(2,4,1);image(wcodemat(A1,192));title('近似A1');subplot(2,4,2);image(wcodemat(H1,192));title('水平细节H1');subplot(2,4,3);image(wcodemat(V1,192));title('垂直细节V1');subplot(2,4,4);image(wcodemat(D1,192));title('对角细节D1');subplot(2,4,5);image(wcodemat(A2,192));title('近似A2');subplot(2,4,6);image(wcodemat(H2,192));title('水平细节H2');subplot(2,4,7);image(wcodemat(V2,192));title('垂直细节V2');subplot(2,4,8);image(wcodemat(D2,192));title('对角细节D2');%从多尺度分解后的系数重构原始图像并显示结果G0=waverec2(C,S,'bior3.7');%figure ('name','多尺度分解后的系数重构原始图像');image(G0);colormap(map2);colorbar;小波包压缩F=imread('i:\1.jpg')F=double(F);Ergb=0.2990*F(:,:,1)+0.5870*F(:,:,2)+0.1140*F(:,:,3);NbColors=255;E=wcodemat(Ergb,NbColors);map4=gray(NbColors);figure('name','小波包压缩');subplot(1,2,1);image(E);colormap(map4);title('原始图像');%==================================%采用默认的全局阈值进行图像压缩处理[thr,sorh,keepapp,crit]=ddencmp('cmp','wp',E);[Ec,treed,perf0,perfl2]=wpdencmp(E,sorh,3,'bior3.1',crit,thr,keepapp); subplot(1,2,2);image(Ec);colormap(map4);title('压缩后的图像');%==================================%给出压缩效率disp('小波分解系数中置0的系数个数百分比:'); perf0disp('压缩后图像剩余能量百分比:');perfl2小波分解系数中置0的系数个数百分比:perf0 =53.0851压缩后图像剩余能量百分比:perfl2 =99.9981DCT压缩x=imread('i:\1.jpg')I=rgb2gray(x);J=dct2(I);%figure('name','色图');imshow(log(abs(J)));colormap(jet(64));colorbar;J(abs(J)<10)=0;K=idct2(J)/255;%figure('name','DCT压缩的图像'); imshow(I);disp('DCT压缩的图像的大小:');whos('I')%figure('name','DCT压缩编码后的图像'); imshow(K);disp('DCT压缩编码后的图像的大小:'); whos('K')DCT压缩的灰度图像原图像的色图x=imread('i:\1.jpg')I=rgb2gray(x);J=dct2(I);%figure('name','色图');imshow(log(abs(J)));colormap(jet(64));colorbar;J(abs(J)<10)=0;K=idct2(J)/255;小波消噪A=imread('i:\1.jpg')A=double(A);Brgb=0.2990*A(:,:,1)+0.5870*A(:,:,2)+0.1140*A(:,:,3); NbColors=255;B=wcodemat(Brgb,NbColors);map3=gray(NbColors);figure('name','小波消噪处理')subplot(2,2,1);image(B);%colormap(map3);title('原始图像灰度图');axis square;%生成含噪图像并图示init=2055615866;randn('seed',init);BB=B+8*randn(size(B));subplot(2,2,2);image(BB);colormap(map3);title('含噪图像');axis square;%对图像进行消噪处理%用小波函数coif2对图像XX进行2层分解[cc,dd]=wavedec2(BB,2,'coif2');n=[1,2];%设置尺度向量p=[10.28,24.08];%设置阈值向量%对三个高频系数进行阈值处理nc=wthcoef2('h',cc,dd,n,p,'s');nc=wthcoef2('v',cc,dd,n,p,'s');nc=wthcoef2('d',cc,dd,n,p,'s');B1=waverec2(nc,dd,'coif2');subplot(2,2,3);image(B1);colormap(map3);title('第一次消噪后的图像');axis square;%再次对三个高频系数进行阈值处理mc=wthcoef2('h',nc,dd,n,p,'s');mc=wthcoef2('v',nc,dd,n,p,'s');mc=wthcoef2('d',nc,dd,n,p,'s');%对更新后的小波分解结构进行重构并图示结果B2=waverec2(mc,dd,'coif2');subplot(2,2,4);image(B2);colormap(map3);title('第二次消噪后的图像');axis square;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
彩色图像灰度化:图像处理系统系统都要用到的基本技术, 例如人脸目标的检测、匹配以及运动物体目标的监测等;
图像灰度化的目的: 提高后续算法速度 提高系统综合应用的时效, 达到更为理想的要求。 因此研究或实现图像灰度化技术具有重要意义。
前 言
在计算机中,图像通常可分为:
二值图像、灰度图像、索引图像、RGB彩色图像和
数字信号处理器原理A
第8章 彩色图像转化成 灰度图像
课前提问:
1、什么是彩色图像灰度化? 2、RGB彩色图像转化成灰度的图像的方 法有几种?分别是什么? 3、指出本章哪些地方有错误?ቤተ መጻሕፍቲ ባይዱ有错别 字?
目 录 第8章 彩色图像转化成灰度图像
8.1 RGB彩色图像转化成灰度图像
8.2 YUV彩色图像转化成灰度图像
三、程序流程图
以“加权平均法”为例, 流程图如右图所示。
四、 C语言代码与分析
void RGB2Gray ( unsigned char *R, /* 输入彩色图像的R分量 */ unsigned char *G /* 输入彩色图像的G分量 */ unsigned char *B, /* 输入彩色图像的B分量 */ unsigned char *Gray, /* 输出的灰度图像 */ int cols, int rows, /* 图像的宽度与高度 */ ) { int i; //定义局部变量 //采用循环的方式对图像中的每个像素进行灰度化 for (i = 0; i < cols*rows; i++) { //方法1: 加权平均法 *Gray++=0.3*(*R++)+ 0.59*(*G++)+ 0.11*(*B++); } }
8.2 YUV彩色图像转化成灰度图像
8.2 YUV彩色图像转化成灰度图像
1、YUV颜色空间
YUV(亦称YCbCr)是PAL电视系统所采用的一种 颜色编码方法;
用亮度和色差来描述色彩分量; 其中: Y: 亮度 U: B-Y,色度分量 V: R-Y色度分量
在图像传输中为什么不采用RGB模型:
YCbCr彩色图像等多种基本类型。
前 言
本章主要介绍怎样将彩色图像转化成灰度图像。
首先,介绍了彩色图像和灰度图像的一些基本属性
然后,给出了彩色图像转化成灰度图像的基本原理,并 列出编程步骤与程序流程图;
最后,按照转换方法设计出图像转换的DSP程序,并给
出试验结果。
8.1 RGB彩色图像转化成灰度图像
RGB模型可以建立在笛卡尔坐标系统里 其中三个轴分别为R、G、B; RGB的模型空间是个正方体.
8.1 RGB彩色图像转化成灰度图像
RGB彩色图像每一个像素的颜色值(由RGB三原 色表示)直接存放在图像矩阵中; RGB彩色图像的每一像素的颜色需由R、G、B三 个分量来表示; 设用N与M分别表示图像的高度与宽度,则该图像 要用三个二维矩阵来分别表示各个像素的R、G、 B三个颜色分量; RGB图像的数据类型一般为8位无符号整型。
第一个缺点:是与黑白图像不兼容。把RGB 三基色转换为 灰度的方法是:灰度=R*0.3+G*0.59+B*0.11,这个转换过程显 然是比较复杂的。对于电视机而言,就意味着必须解码出 RGB信号才有可能得到黑白图像,而黑白电视机没有解码功 能,所以不能实现兼容。
第二个缺点:占用太多带宽。用RGB 三基色表示图像,每 个分量的带宽是均等的,都约等于亮度信号的带宽,所以对 于每个分量,都要用较大的带宽来描述。 第三个缺点:抗干扰能力差。由于G分量占有亮度值的59% ,所以当G受到干扰的时候,像素的亮度值会受到很大的影响 ,而人眼对亮度值的变化是十分敏感的,所以图像主观质量 会明显下降。
其计算式如下所示:
F (i, j) R(i, j) G(i, j) B(i, j) 3
一、彩色图像灰度化的原理 方法3:最大值法
所谓最大值法就是将彩色图像中每个像素的R、 G、B三个分量中的最大值作为灰度图对应像素 的灰度值。
其计算式如下:
F (i, j ) max( R(i, j ), G(i, j ), B(i, j ))
8.3 试验结果与分析
8.4 分析与总结
本章学习目标
了解彩色图像与灰度图像的基本属性; 理解彩色图像转化成灰度图像的基本方法; 掌握算法步骤与编程流程图;
掌握图像灰度化的DSP程序。
知识要点:
彩色图像灰度化的基本原理;
相应的DSP编程方法。
前 言
数字图像处理,即用计算机对图像进行处理,是一门极具应 用价值的科学, 它随计算机技术的迅速发展而不断成熟; 数字图像处理技术已经开始广泛深入地应用于国计民生休戚 相关的各个领域 ;
问题1:将RGB彩色图像转化为灰度图像?
一、彩色图像灰度化的原理 一般有以下三种转化方案:
方法1: 加权平均法
所谓加权平均法就是根据三基色的重要性及其它指标, 将R、G、B三个分量以不同的权值进行加权平均
由于人眼对绿色的敏感最高,对蓝色敏感最低; 因此,我们可以按下式对R、G、B三分量进行加权平均 ,则能得到较合理的灰度图像。
二、 算法步骤
为了将RGB彩色图像转化成灰度图像,编程主要步骤如下:
输入:原彩色图像的三个颜色通道,即R、G和B;
输出:变换后的灰度图像Gray; Step 1:获取原彩色图像的高rows与宽度cols;
Step 2:为灰度图像Gray申请空间;
Step 3:for ( i=0; i<rows; r++) For (j=1; j<cols; j++) 采用一种灰度化方法计算Gray (i, j)处的灰度值; end for end for Step 4: 输出图像Gray,程序结束。
8.1.1 基本原理
1、RGB颜色模型:
俄国科学家罗蒙洛索夫于1756 年首先提出三基色
(RGB)的假设,奠定了认识色觉的基础。
RGB颜色空间作为一种常用的彩色图像表示模型,
它分别用红(R)、绿(G)、蓝(B)三原色的组
合来表示每个像素的颜色。
8.1 RGB彩色图像转化成灰度图像
RGB颜色空间
F (i, j ) 0.30 R(i, j ) 0.59 G(i, j) 0.11 B(i, j)
一、彩色图像灰度化的原理
方法2:平均值法
所谓平均值法就是对彩色图像的每个像素中的 R、 G、B三个分量的值进行简单的算术平均; 将得到平均值作为灰度图像对应像素的亮度值;