彩色图像为何灰度化处理?http://www.cnblogs.com/Wiseman/archive/2007/06/09/69701.html?page=4

1、图像深度是指存储每个像素所用的位数,真彩色为24位。3X8=RGB

也用于量度图像的色彩分辨率.图像深度确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数.它决定了彩色图像中可出现的最多颜色数,或灰度图像中的最大灰度等级.比如一幅单色图像,若每个象素有8位,则最大灰度数目为2的8次方,即256.一幅彩色图像RGB3个分量的象素位数分别为4,4,2,则最大颜色数目为2的4+4+2次方,即1024,就是说像素的深度为10位,每个像素可以是1024种颜色中的一种.

  例如:一幅画的尺寸是1024*768,深度为16,则它的数据量为1.5M。

  计算如下:1024*768*16bit=(1024*768*16)/8字节=[(1024*768*16)/8]/1024KB={[(1024*768*16)/8]/1024}/1024MB。

具有全彩色照片表达能力的图像为24 位彩色图像,由于彩色的种类很多,每个像素需要24 为,。使得彩色图像所需要的存储空间很大。图像处理时一般要转换为灰度图像。

因为自然界中所有的颜色都可以用RGB三种颜色波长的不同强度组合而得,这就是人们常说的三基色原理。


彩色空间的不同方式转换;==========不同彩色空间之间是可以相互转换的。【转换公式】===

2、彩色图像的灰度化处理;

http://wenku.baidu.com/view/70ced19851e79b89680226bc.html

现在大部分的彩色图像都是采用RGB颜色模式,处理图像的时候,要分别对RGB三种分量进行处理,
实际上RGB并不能反映图像的形态特征,只是从光学的原理上进行颜色的调配。
现在有很多其他的颜色模式,例如HSI模式,HSI是由色调,饱和度,亮度三个分量来表示颜色。HSI比RGB更符合人的视觉特性。
但是HSI也是三通道,真正反映图像特征的变量是I,其他都是色彩的反映。
所以我们经常要把图像弄成8位的灰度值图像直接进行处理,可以通过直方图,灰度变化,还有正交变换之类的进行处理。甚至经常把图像分割之后变成二值图像处理。

这是我一家之言,但是是我长时间的图像处理,及参考了很多书之后得出的经验,不少书上也差不多是这般解释。
 
 
如果原来的彩色图像是800×600×3的话,变成灰度图像就变成800×600了,类型都是uint8 的,也就是无符号八位整数,0到255MATLAB的话,用rgb2gray函数可以转换,三个分量转成一个分量是以0.2989 * R + 0.5870 * G + 0.1140 * B的比例转换。
==========加权平均化点的得到较合理的灰度图像。
可以看出的是,G分量占的比例最大,有时可以直接使用G值作为转换后的图像。
这是因为人眼对绿色最敏感,蓝色敏感最低的原因。视为适合人的观察而设置的参数如此。
 
   
 
  

3、彩色图像的特效处理;通过空间域数字点的运算

a,逆反处理;对像素值取反 =======255 -----   (R,G,B,)

 b , 曝光处理;逆转小于某一阈值T的RGB值,高于阈值的RGB不发生变化,注意阈值T的选择。

c, 扩散处理;从当前像素周围5X5相邻的像素中随机的rand(5)任一选择一个值作为当前像素的值。从而使这一小区域内的值发生未知变化。

d ,马赛克处理;模糊化处理过程,使图像每一小块矩阵内的所有像素值都取像素值和的平均值。

e ,平滑处理,1、邻域平均法和2、线性平滑滤波。

                                           C++算法实现;

                                             1、取得图像文件的拷贝文件。

                                              2、开辟一个临时的缓冲区。

                                              3、取得图像的数据区指针,得到前点及周围8个点的RGB的对应值;

                                              4、将对应的RGB三个分量分别和在平均。

                                               5、把得到的新的像素值RGB存放到对应的临时缓冲区;

                                               6、再把缓冲区中的数据返回,否该拷贝文件的数据区;

                                               7,删除临时缓冲区,

                                                8、显示图像。

f,图像的锐化处理;===========边缘检测。【利用原图像得出边界,但不改变原始数据,对边界分析】!!!!!!!!!!!

1、水平增强    2、垂直增强    3、双向增强       4、梯度锐化        5、高通滤波器       6、浮雕处理     7、霓虹处理,,,,,

http://www.cnblogs.com/Wiseman/archive/2007/06/09/69701.html?page=4

============================================================================================================

由于图片的噪音是一些孤立的点,这些点与它周围点的灰度相差很大,

于是在图片显示出来的效果很突出,于是以上的程序采样平均法滤波。

原理是把图片上的点都与它周围的点的灰度平均值比较,如果这个点的灰度与平均值相差很大,【如何界定差值相对较大的阈值T】就被认为是孤立点,于是用灰度平均值代替这个点的灰度;如果它们相差很少,就不认为是孤立点,不改变原来点的灰度。比如,一个点A的灰度值为122,它周围点的灰度如下:

 

142

156

135

138

122

146

135

198

231

    于是A点周围的平均值为

(142+156+135+138+135+198+231+146+135)÷8=160.25

取整后为160,于是发现160-122=38。

由于经过多次的实验和反复的尝试,我们发现平均值与中间点灰度相差9的时候,图片能去掉所有的孤立点,并且零件图像不会损失,于是决定把相差值定为9。而38>9,于是上面A点的灰度应该是160,而不是122

【但是,如何做到对不同图样的统一化标准】???????????


=========================================================================================

图像的合成;Matlab中的各种逻辑运算方式求解。

加法:C=A+B去除叠加噪音生成叠加效果
减法:C=A-B去除叠加图案检测同一场景中的图像变化
乘法:C=A*B图像的局部显示
求反:~A获得负像获得子图像的补图像
异或:A⊙B获得相交图像

clear all
A=imread('clev1.bmp');
B=imread('clev2.bmp');
figure('Name','原始图像') %创建图像窗口%
subplot(1,2,1)   %拆分窗口%
imshow(A);title('原始A'); %显示指定工作区图像%
colorbar   %添加色度条%
subplot(1,2,2)
imshow(B);title('原始B');
colorbar

figure('Name','图像算数运算')
res1=imadd(A,B);  %A+B%
res2=imsubtract(A,B);  %A-B%
res2_2=imsubtract(B,A);  %B-A%
res3=immultiply(A,B);  %A*B%
res4=imdivide(A,B);  %A/B%
res4_2=imdivide(B,A);  %B/A%
subplot(2,3,1)
imshow(res1);title('A加B');
subplot(2,3,2)
imshow(res2);title('A减B');
subplot(2,3,3)
imshow(res2_2);title('B减A');
subplot(2,3,4)
imshow(res3);title('A乘B');
subplot(2,3,5)
imshow(res4);title('A除B');
subplot(2,3,6)
imshow(res4_2);title('B除A');

C=A(:,:,1);  %取单色%
D=B(:,:,1);
figure('Name','图像逻辑运算')
res1=C&D;  %C&D%
res2=C|D;  %C|D%
res3=xor(C,D);  %xor C D%
res3_2=xor(D,C)  %xor D C%
res4=not(C)&not(D); %~C%
res4_2=not(C)|not(D); %~D%
subplot(2,3,1)
imshow(res1);title('C&D');
subplot(2,3,2)
imshow(res2);title('C|D');
subplot(2,3,3)
imshow(res3);title('xor C D');
subplot(2,3,4)
imshow(res3_2);title('xor D C');
subplot(2,3,5)
imshow(res4);title('~C&~D');
subplot(2,3,6)
imshow(res4_2);title('~C|~D');


 彩色图像为何灰度化处理?http://www.cnblogs.com/Wiseman/archive/2007/06/09/69701.html?page=4_第1张图片

(自制两幅色阶图片上半部分相同,下部不同,黑色块用于逻辑运算时显示计算效果)

彩色图像为何灰度化处理?http://www.cnblogs.com/Wiseman/archive/2007/06/09/69701.html?page=4_第2张图片

彩色图像为何灰度化处理?http://www.cnblogs.com/Wiseman/archive/2007/06/09/69701.html?page=4_第3张图片
(~代表取反)

===============================================================================

Matlab 基础部分:(图像) 读取 储存 显示 矩阵 信息

1.       Matlab中图像的基本操作和处理

图像读取函数:imread()
将图像文件读入工作区A = imread(filename, fmt)
实例:a=imread('P:\color1.jpg');

图像存储函数:imwrite()
将工作区数据写入标准图像文件imwrite(A,filename,fmt)
实例:imwrite(a,'file.bmp','bmp')

显示图像函数:imshow()  
根据工作区数据格式显示为指定范围图像imshow(I,[low high])
实例:imshow(a,[1 20]) 

图像函数:image()
将工作区数据显示为坐标属性图像image(x,y,C,'PropertyName',PropertyValue,...)
实例:image(1000,500,a)

矩阵尺寸函数:size()
获取工作区矩阵尺寸
实例:[m n]=size(a)

信息:whos
获取记录信息log.whos('all')

M文件操作:save/load
存储到Mat文件

=========================================================

Matlab 图像格式的转换
灰度图像与索引图像的相互转换:gray2ind( )  ind2gray( )
RGB图像与灰度图像的转换:rgb2gray( )
二进制图像转换:BW=im2bw()

程序和图像

clear all;
RGB=imread('s.jpg');             %要求输入为3色 uint8阵列图像 所以采用JPG图片%

[X,MAP]=rgb2ind(RGB,128);      %RGB转索引 128色%
I=rgb2gray(RGB);               %RGB转灰度%
BW=im2bw(RGB,0.5);           %RGB转二色 阈值0.5 %
iRGB=ind2rgb(X,MAP);          %索引转RGB%
iI=ind2gray(X,MAP);             %索引转灰度%
iBW=im2bw(X,MAP,0.5);         %索引转二色%
[x2,map2]=gray2ind(I,128);        %灰度转索引 128色%
gBW=im2bw(I,0.5);              %灰度转二色%

figure('Name','图像转换')          %创建图像窗口%
subplot(3,3,1)                   %拆分窗口%
imshow(RGB);title('原始');         %显示指定工作区图像%
colorbar                        %添加色度条%
subplot(3,3,5)
imshow(I);title('RGB->灰度');
colorbar
subplot(3,3,6)
imshow(BW);title('RGB->二进制');
colorbar
subplot(3,3,7)
imshow(iRGB);title('索引->RGB');
colorbar
subplot(3,3,8)
imshow(iI);title('索引->灰度');
colorbar
subplot(3,3,9)
imshow(iBW);title('索引->二进制');
colorbar
subplot(3,3,2)
imshow(x2,map2);
title('灰度->索引');
colorbar
subplot(3,3,3)
imshow(gBW);title('灰度->二进制');
colorbar

figure('Name','图像转换2')        % figure中存在多个颜色表不能正常显示 单独显示%
subplot(3,3,4);
imshow(X,MAP);
title('RGB->128索引');
colorbar

 

 

图像格式示例:
彩色图像为何灰度化处理?http://www.cnblogs.com/Wiseman/archive/2007/06/09/69701.html?page=4_第4张图片

   



你可能感兴趣的:(c,工作,image,matlab,存储,图像处理)