精华内容
下载资源
问答
  • 请用MATLAB或其它语言编写相关程序,输入一幅灰度图像,分别采用梯度算子、拉普拉斯算子、Sobel算子、Prewitt算子对图像进行锐化,在同一个窗口输出显示原始图像和4种结果图像
  • 初学数字图像识别与处理——题目:C++ 编程将一幅256灰度级的灰度图像分解为不同灰度的分辨率(128,64,32,16,8,4,2)的图像 20210502 题目:编程将一幅256灰度级的灰度图像分解为不同灰度的分辨率(128,64,32,16,8,4,2)的...

    初学数字图像识别与处理——题目:C++ 编程将一幅256灰度级的灰度图像分解为不同灰度的分辨率(128,64,32,16,8,4,2)的图像

    20210509

    题目:编程将一幅256灰度级的灰度图像分解为不同灰度的分辨率(128,64,32,16,8,4,2)的图像

    1.概念分析

    灰度级:即画面灰度级(Picture Grayscale),指传统绘画、CG绘画、摄影作品或其他视觉作品等画面中每个颜色与自身色光对应的明度值,包括纯白、纯黑和其间的无数级灰度。灰度也就是所谓的色阶或灰阶,是指亮度的明暗程度。也称中间色调(Half-tone)主要用于传送图片,分别有16级、32级、64级三种方式,它采用矩阵处理方式将文件的像素处理成16、32、64级层次,使传送的图片更清晰。(来自百度百科)

    灰度图像:是一种具有从黑到白256级灰度色阶或等级的单色图像。该图像中的每个像素用8位数据表示,因此像素点值介于黑白间的256种灰度中的一种。现在的灰度分为256级,类似于黑白电视的明暗图像,灰度级别越高,图像越暗,表示的地理位置就不同,当然光线也有区别。(来自百度百科)

    2.题目分析

    彩色图像怎样转灰度图像?
    对于图像由彩色图转化为灰度图有三种方法分别为 加权法 均值法 最大值法。
    加权法就是 GRAY=0.3R+0.59G+0.11*B
    均值法就是 GRAY=(R+G+B)/3
    最大值法就是 max(R,G,B)
    但是我用的是Gamma校正得出的灰度值
    公式为
    在这里插入图片描述
    得到了当前的灰度值,那么如何从一个灰度级降到另外的灰度级呢?
    借鉴 博主weixin_34129145的思想(原文:https://blog.csdn.net/weixin_34129145/article/details/86464767)
    就是将原灰度值进行分区,使其符合目标灰度级的分区。然后将原灰度值与所在区域中的中值进行比较,大于中值时,将改区域最大值赋予灰度值,反之将上一个区域的最大值赋值与灰度值,最后将RGB讲个元素的值都赋予变换后灰度值即可。
    如:如果想将256灰度级的灰度图像将至2灰度级的灰度图像,则需要将原0-255的灰度值分成0-127和128-255两个区域。假设某点Q的GBR分别为120,120,120,则120在区域0-127,比较中值(63.5),120>63.5,所以点Q的灰度值将会变化成该区域最大值127,即该点GBR为127,127,127。

    代码如下:

    void CImage_ProcessingView::On2562()
    {
        if (m_Image.IsNull()) return;//判断图像是否为空,如果对空图像进行操作会出现未知的错误
        int w = m_Image.GetWidth();
        int h = m_Image.GetHeight();
        for (int j = 0; j<h; j++)
        {
            for (int k = 0; k<w; k++)
            {
                double R = m_Image.m_pBits[2][j][k]; double G = m_Image.m_pBits[1][j][k]; double B = m_Image.m_pBits[0][j][k];
                //将三元素分别赋值于R、G、B
                double gray = pow((pow(R, 2.2) + pow(1.5*G, 2.2) + pow(0.6*B, 2.2)) / (1 + pow(1.5, 2.2) + pow(0.6, 2.2)), 1 / 2.2);
                //Gamma校正得出的灰度值
                
                int jiange = 128;//每个区域128个数值
                int qu = gray / jiange;//计算出有多少区域(0区,1区…..)
                if (gray >double(jiange*qu + (jiange*(qu + 1) - 1)) / 2)//判断256灰度值在区域中与区域中值比较。如果大于中值取区域最大值,如果小于,则取上一个区域最大值
                    gray = jiange*(qu + 1) - 1;//本区最大值
                else
                {
                    if (qu == 0)
                    {
                        gray = 0;//如果一开始就在0区,且小于中值,直接等于0
                    }
                    else
                    {
                        gray = jiange * qu - 1;//上一个区域最大值
                    }
                } //每个区域128个数值的范围
    
                m_Image.m_pBits[0][j][k] = gray;
                m_Image.m_pBits[1][j][k] = gray;
                m_Image.m_pBits[2][j][k] = gray;
                //某像素的灰度值是将三原色设置成同一值
            }
        }//输出2灰度级的图像
        Invalidate(1); //ONDRAW会绘制图像
    }
    
    展开全文
  • 数字图像灰度直方图

    千次阅读 2016-01-09 13:26:55
    灰度直方图是数字图像中最简单且有用的工具,这篇主要总结OpenCV中直方图CvHistogram的结构和应用。 灰度直方图的定义 灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率...

    灰度直方图是数字图像中最简单且有用的工具,这一篇主要总结OpenCV中直方图CvHistogram的结构和应用。

    灰度直方图的定义

    灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率)。
    一维直方图的结构表示为

    高维直方图可以理解为图像在每个维度上灰度级分布的直方图。常见的是二维直方图。如红-蓝直方图的两个分量分别表示红光图像的灰度值和蓝光图像灰度值的函数。其图像坐标(Dr,Db)处对应在红光图像中具有灰度级Dr同时在蓝光图像中具有灰度级Db的像素个数。这是基于多光谱——每个像素有多个变量——的数字图像,二维中对应每个像素统计个变量。

    OpenCV中的直方图CvHistogram

    注意我们在上面理解直方图的意义时更多把他想象成一幅 “图”,继而理解图中横坐标,纵坐标的意义。而在OpenCV中,应该更多把直方图看做 “数据结构”来理解。
    [cpp]  view plain copy
    1. typedef struct CvHistogram  
    2. {  
    3.     int     type;  
    4.     CvArr*  bins;  //存放每个灰度级数目的数组指针  
    5.     float   thresh[CV_MAX_DIM][2];  //均匀直方图  
    6.     float** thresh2; //非均匀直方图  
    7.     CvMatND mat;  //直方图数组的内部数据结构  
    8. }  
    9. CvHistogram;  
    这个结构看起来简单(比IplImage*元素少多了。。。)其实并不太好理解。
    第一个成员type用来指定第二个成员bins的类型。OpenCv中常见到CvArr*的接口,可以用以指定诸如CvMat、CvMatND、IplImage的类型,其实CvArr*的是一个指向void的指针。在函数内部有时需要得到确切的指向类型,这就需要type来指定。
    thresh用来指定统计直方图分布的上下界。比如[0 255]表示用来统计图像中像素分别在灰度级[0 255]区间的分布情况,CV_MAX_DIM对应直方图的维数,假如设定二维红-蓝直方图的thresh为[0 255;100 200],就是分别统计红色图像灰度级在[0 255]以及蓝色图像在灰度级[100 200]的分布情况。
    thresh用以指定均匀直方图的分布,我们按每个像素理解自然是“均匀分布”,其实也可以统计像素在几个区间的分布。如果统计像素在2个区间的分布,则对应[0 255]的上下界,均匀分布统计的区间即[0 127] [127 255]分布的概率,这也是为什么thresh第二个维数默认为2——会自动均分上下界;而thresh2指定非均匀的分布,这就需要指定每个区间的上下界,如果要统计直方图在区间(0,10,100,255)的分布,那需要指定thresh2的一个维度为[0 10 100 255],所以用float**形式表示。
    mat简单说就是存储了直方图的信息,即我们统计的直方图分布概率。

    创建直方图 cvCreateHist()

    OpenCV中用cvCreateHist()创建一个直方图:
    [cpp]  view plain copy
    1. CvHistogram* cvCreateHist(   
    2.     int dims, //直方图维数   
    3.     int* sizes,//直翻图维数尺寸  
    4.     int type, //直方图的表示格式  
    5.         float** ranges=NULL, //图中方块范围的数组  
    6.     int uniform=1 //归一化标识  
    7.     );  
    size数组的长度为dims,每个数表示分配给对应维数的bin的个数。如dims=3,则size中用[s1,s2,s3]分别指定每维bin的个数。
    type有两种:CV_HIST_ARRAY 意味着直方图数据表示为多维密集数组 CvMatND; CV_HIST_TREE 意味着直方图数据表示为多维稀疏数组 CvSparseMat。
    ranges就是那个复杂的不好理解的thresh的范围,他的内容取决于uniform的值。uniform为0是均匀的,非0时不均匀。
    计算图像直方图的函数为CalcHist():
    [cpp]  view plain copy
    1. void cvCalcHist(   
    2.     IplImage** image, //输入图像(也可用CvMat**)  
    3.     CvHistogram* hist, //直方图指针  
    4.                  int accumulate=0, //累计标识。如果设置,则直方图在开始时不被清零。  
    5.     const CvArr* mask=NULL //操作 mask, 确定输入图像的哪个象素被计数  
    6.     );  
    要注意的是这个函数用来计算一张(或多张) 单通道图像的直方图,如果要计算多通道,则用这个函数分别计算图像每个单通道。

    实践:一维直方图

    下面实践一下用OpenCV生成图像的一维直方图
    [cpp]  view plain copy
    1. int main( )  
    2. {  
    3.     IplImage * src= cvLoadImage("baboon.jpg");  
    4.     IplImage* gray_plane = cvCreateImage(cvGetSize(src),8,1);  
    5.     cvCvtColor(src,gray_plane,CV_BGR2GRAY);  
    6.   
    7.     int hist_size = 256;    //直方图尺寸  
    8.     int hist_height = 256;  
    9.     float range[] = {0,255};  //灰度级的范围  
    10.     float* ranges[]={range};  
    11.     //创建一维直方图,统计图像在[0 255]像素的均匀分布  
    12.     CvHistogram* gray_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);  
    13.     //计算灰度图像的一维直方图  
    14.     cvCalcHist(&gray_plane,gray_hist,0,0);  
    15.     //归一化直方图  
    16.     cvNormalizeHist(gray_hist,1.0);  
    17.   
    18.     int scale = 2;  
    19.     //创建一张一维直方图的“图”,横坐标为灰度级,纵坐标为像素个数(*scale)  
    20.     IplImage* hist_image = cvCreateImage(cvSize(hist_size*scale,hist_height),8,3);  
    21.     cvZero(hist_image);  
    22.     //统计直方图中的最大直方块  
    23.     float max_value = 0;  
    24.     cvGetMinMaxHistValue(gray_hist, 0,&max_value,0,0);  
    25.       
    26.     //分别将每个直方块的值绘制到图中  
    27.     for(int i=0;i<hist_size;i++)  
    28.     {  
    29.         float bin_val = cvQueryHistValue_1D(gray_hist,i); //像素i的概率  
    30.         int intensity = cvRound(bin_val*hist_height/max_value);  //要绘制的高度  
    31.         cvRectangle(hist_image,  
    32.             cvPoint(i*scale,hist_height-1),  
    33.             cvPoint((i+1)*scale - 1, hist_height - intensity),  
    34.             CV_RGB(255,255,255));    
    35.     }  
    36.     cvNamedWindow( "GraySource", 1 );  
    37.     cvShowImage("GraySource",gray_plane);  
    38.     cvNamedWindow( "H-S Histogram", 1 );  
    39.     cvShowImage( "H-S Histogram", hist_image );  
    40.   
    41.     cvWaitKey(0);  
    42. }  
    试验结果:

    对应的,我们可以用一样的思路统计每个通道的直方图,并绘制图像每个通道像素的分布:


    实践:二维直方图

    我们也可以结合OpenCV的例子生成二维直方图:
    [cpp]  view plain copy
    1. IplImage* r_plane  = cvCreateImage( cvGetSize(src), 8, 1 );  
    2.     IplImage* g_plane  = cvCreateImage( cvGetSize(src), 8, 1 );  
    3.     IplImage* b_plane  = cvCreateImage( cvGetSize(src), 8, 1 );  
    4.     IplImage* planes[] = { r_plane, g_plane };  
    5.     //将HSV图像分离到不同的通道中  
    6.     cvCvtPixToPlane( src, b_plane, g_plane, r_plane, 0 );  
    7.   
    8.     // 生成二维直方图数据结构  
    9.     int r_bins =256, b_bins = 256;   
    10.     CvHistogram* hist;  
    11.     {  
    12.         int    hist_size[] = { r_bins, b_bins };  
    13.         float  r_ranges[]  = { 0, 255 };          // hue is [0,180]  
    14.         float  b_ranges[]  = { 0, 255 };   
    15.         float* ranges[]    = { r_ranges,b_ranges };  
    16.         hist = cvCreateHist( 2, hist_size, CV_HIST_ARRAY, ranges, 1);   
    17.     }  
    18.     //计算一张或多张单通道图像image(s) 的直方图  
    19.     cvCalcHist( planes, hist, 0, 0 );  
    刚才的图我们是对应每个横坐标绘制纵坐标的直方块,二维的图需要绘制每个点:
    [cpp]  view plain copy
    1. forint h = 0; h < r_bins; h++ ) {  
    2.   forint s = 0; s < b_bins; s++ ) {  
    3.     float bin_val = cvQueryHistValue_2D( hist, h, s ); //查询直方块的值  
    4.         int intensity = cvRound( bin_val * 255 / max_value );  
    5.         cvRectangle( hist_img,   
    6.           cvPoint( h*scale, s*scale ),  
    7.           cvPoint( (h+1)*scale - 1, (s+1)*scale - 1),  
    8.           CV_RGB(intensity,intensity,intensity),   
    9.           CV_FILLED);  
    10.     }  
    11. }  


    最终生成二维直方图:

    直方图的应用以后再讨论。

    转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7600666

    实验代码下载:http://download.csdn.net/detail/xiaowei_cqu/4328881


    Mat格式的参考这里:

    http://blog.csdn.net/xiaowei_cqu/article/details/8833799



    (转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)

    展开全文
  • 1.设计一个程序,绘制出一幅灰度图象的直方图。 2.对同一场景但模糊程度不一样的三张数字图像绘制出其直方图, 计算每一幅图象所有 像素灰度的方差。图象的清晰度同灰度方差什么关系? 3.对一幅灰度图象进行线性点运算...
  • 目录 1 图像灰度化原理 2 图像颜色空间转换 ...图像灰度化是将一幅彩色图像转换为灰度图像的过程。彩色图像通常包括R、G、B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色图像的R、G、...

    目录

    1 图像灰度化原理

    2 图像颜色空间转换

    3 OpenCV图像灰度化处理

    3.1 最大值灰度处理

    3.2 平均灰度处理

    3.3 加权平均灰度处理

    参考资料


    1 图像灰度化原理

    在图像处理算法中,往往需要把彩色图像转换为灰度图像。图像灰度化是将一幅彩色图像转换为灰度化图像的过程。彩色图像通常包括R、G、B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色图像的R、G、B三个分量相等的过程。灰度图像中每个像素仅具有一种样本颜色,其灰度是位于黑色与白色之间的多级色彩深度,灰度值大的像素点比较亮,反之比较暗,像素值最大为255(表示白色),像素值最小为0(表示黑色)。假设某点的颜色由RGB(R,G,B)组成,常见灰度处理算法有:

           算法名称                          算法公式 

     最大值灰度处理

                  gray=\max (R,G,B)

       浮点灰度处理

         gray=0.3R+0.59G+0.11B

       整数灰度处理

       gray=(30R+59G+11B)/100

       移位灰度处理

      gray=(28R+151G+77B)>>8

       平均灰度处理

                     gray=(R,G,B)/3

    加权平均灰度处理

     gray=0.299R+0.587G+0.144B

    其中,常见的灰度处理方法是将RGB三个分量求和再取平均值,但更为准确的方法是设置不同的权重,将RGB分量按不同的比例进行灰度划分。比如人类的眼睛感官蓝色的敏感度最低,敏感最高的是绿色,因此将RGB按照0.299、0.587、0.144比例加权平均能得到较合理的灰度图像

                                                                                 gray=0.299R+0.587G+0.144B


     

    2 图像颜色空间转换

    在日常生活中,我们看到的大多数彩色图像都是RGB类型,但是在图像处理过程中,常常需要用到灰度图像、二值图像、HSV、HSI等颜色,OpenCV提供了 cvtColor() 函数实现这些功能。

    OpenCV中 cvtColor() 函数形式如下所示:

    dst = cv2.cvtColor(src, code[, dst[, dstCn]])

    src 表示输入图像,需要进行颜色空间变换的原图像;

    dst 表示输出图像,其大小和深度与src一致;

    code 表示转换的代码或标识;

    dstCn 表示目标图像通道数,其值为0时,则有src和code决定。

    该函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间,其中,RGB是指Red、Green和Blue,一幅图像由这三个通道(channel)构成;Gray表示只有灰度值一个通道;HSV包含Hue(色调)、Saturation(饱和度)和Value(亮度)三个通道。在OpenCV中,常见的颜色空间转换标识包括CV_BGR2BGRA、CV_RGB2GRAY、CV_GRAY2RGB、CV_BGR2HSV、CV_BGR2XYZ、CV_BGR2HLS等。

    下面是调用 cvtColor() 函数将图像颜色空间转换(BGR、RGB、GRAY、HSV、YCrCb、HLS、XYZ、LAB 和 YUV)

    代码如下所示:

    #encoding:utf-8
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    #读取原始图像
    img_BGR = cv2.imread('zxp.jpg')
    
    #BGR转换为RGB
    img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)
    
    #灰度化处理
    img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)
    
    #BGR转HSV
    img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)
    
    #BGR转YCrCb
    img_YCrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb)
    
    #BGR转HLS
    img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS)
    
    #BGR转XYZ
    img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ)
    
    #BGR转LAB
    img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB)
    
    #BGR转YUV
    img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV)
    
    #调用matplotlib显示处理结果
    titles = ['BGR', 'RGB', 'GRAY', 'HSV', 'YCrCb', 'HLS', 'XYZ', 'LAB', 'YUV']
    images = [img_BGR, img_RGB, img_GRAY, img_HSV, img_YCrCb,
              img_HLS, img_XYZ, img_LAB, img_YUV]
    for i in range(9):
       plt.subplot(3, 3, i+1), plt.imshow(images[i], 'gray')
       plt.title(titles[i])
       plt.xticks([]),plt.yticks([])
    plt.show()
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:


     

    3 OpenCV图像灰度化处理

    下面主要介绍最大值灰度处理平均灰度处理加权平均灰度处理 算法。

    3.1 最大值灰度处理

    该方法的灰度值等于彩色图像R、G、B三个分量中的最大值,公式如下:

                                                                                   gray=\max (R,G,B)

     

    代码如下所示:

    #encoding:utf-8
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    #读取原始图像
    img = cv2.imread('zxp.jpg')
    
    #获取图像高度和宽度
    height = img.shape[0]
    width = img.shape[1]
    
    #创建一幅图像
    grayimg = np.zeros((height, width, 3), np.uint8)
    
    #图像最大值灰度处理
    for i in range(height):
        for j in range(width):
            #获取图像R G B最大值
            gray = max(img[i,j][0], img[i,j][1], img[i,j][2])
            #灰度图像素赋值 gray=max(R,G,B)
            grayimg[i,j] = np.uint8(gray)
    
    #显示图像
    cv2.imshow("src", img)
    cv2.imshow("gray", grayimg)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:(处理效果的灰度偏亮

     

     

    3.2 平均灰度处理

    该方法的灰度值等于彩色图像R、G、B三个分量灰度值的求和平均值,其计算公式如下所示:

                                                                                        gray=(R,G,B)/3

     

    代码如下所示:

    #encoding:utf-8
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    #读取原始图像
    img = cv2.imread('zxp.jpg')
    
    #获取图像高度和宽度
    height = img.shape[0]
    width = img.shape[1]
    
    #创建一幅图像
    grayimg = np.zeros((height, width, 3), np.uint8)
    # print (grayimg)
    
    #图像平均灰度处理方法
    for i in range(height):
        for j in range(width):
            #灰度值为RGB三个分量的平均值
            gray = (int(img[i,j][0]) + int(img[i,j][1]) + int(img[i,j][2]))  /  3
            grayimg[i,j] = np.uint8(gray)
    
    #显示图像
    cv2.imshow("src", img)
    cv2.imshow("gray", grayimg)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:

     

     

    3.3 加权平均灰度处理

    该方法根据色彩重要性,将三个分量以不同的权值进行加权平均。常见的灰度处理方法是将RGB三个分量求和再取平均值,但更为准确的方法是设置不同的权重,将RGB分量按不同的比例进行灰度划分。比如人类的眼睛感官蓝色的敏感度最低,敏感最高的是绿色,因此将RGB按照0.299、0.587、0.144 比例加权平均能得到较合理的灰度图像:

                                                                           gray=0.299R+0.587G+0.144B

     

    代码如下所示:

    #encoding:utf-8
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    #读取原始图像
    img = cv2.imread('zxp.jpg')
    
    #获取图像高度和宽度
    height = img.shape[0]
    width = img.shape[1]
    
    #创建一幅图像
    grayimg = np.zeros((height, width, 3), np.uint8)
    # print grayimg
    
    #图像加权平均灰度处理方法
    for i in range(height):
        for j in range(width):
            #灰度加权平均法
            gray = 0.30 * img[i,j][0] + 0.59 * img[i,j][1] + 0.11 * img[i,j][2]
            grayimg[i,j] = np.uint8(gray)
    
    #显示图像
    cv2.imshow("src", img)
    cv2.imshow("gray", grayimg)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:

     


     

    参考资料

    [1] https://blog.csdn.net/Eastmount/article/details/88785768

    [2] Python+OpenCV图像处理

    展开全文
  • 一幅数字图像的信息熵值%求一幅数字图像的熵值 %作者:(Peter Chan) %完成日期:2009-07-30 %--------------------------------- I=imread('lena.bmp'); %I=double(I); [C,R]=size(I); %求图像的规格 Img_size=C...
  • 灰度 灰度图像

    2014-11-22 22:22:00
    1、灰度图像、灰度(值) 灰度图像是灰度像素组成的,所谓灰度像素就是指:在RGB颜色模型下,图像中每个像素颜色的R、G、B 三种基色的分量值相等的像素。...在数字图像处理中,灰度直方图是种最简单、最有用

    1、灰度图像、灰度(值)

    灰度图像是由灰度像素组成的,所谓灰度像素就是指:在RGB颜色模型下,图像中每个像素颜色的R、G、B 三种基色的分量值相等的像素。在RGB 颜色模型下,RGB 三原色的取值都是0~255 之间的整数。因此,灰度图像只能表现256 种颜色(或亮度)。通常把灰度图像中像素的亮度称为灰度值。

    2、图像的灰度化处理

    在数字图像处理中,灰度直方图是一种最简单、最有用的工具之一,它概括了一幅图像的灰度级内容。任何一幅图像的灰度直方图都包括了可观的信息,某些类型的图像还可由其直方图完全描述。需要说明的是,一幅图像唯一对应一幅直方图,但是一幅直方图则有可能对应无数幅图像,这一点不难理解,因为灰度直方图反映的只是图像中各级灰度的统计数目,而与图像中各级灰度象素的分布位置无关。灰度图像是建立灰度直方图的基础,因此下面先介绍彩色图像的灰度化处理。

    2.3.1 图像的灰度化处理

    数字图像的灰度化处理是指把彩色图像转化为灰度图像的处理过程。

    灰度化处理的方法有很多种方法,经常使用的方法主要有如下三种:

    1、最大值法:使R、G、B 的值等于三个值中最大的一个,即: R = G = B = max(R,G, B)用最大值法对彩色图像进行灰度化处理会使图像的整体亮度增强。

    2、平均值法:对R、G、B 求出平均值,即:

    R = G = B = (R,G,B) / 3

    采用平均法对彩色图像进行灰度化处理会形成比较柔和的灰度图像。

    3、加权平均值法:根据三种基色的重要性或其他指标给R、G、B 赋予不同的权值,即:

    R = G = B = (Wr*R + Wg*G + Wb*B)/(Wr + Wg + Wb)

    其中,Wr、Wg、Wb分别为R、G、B 的权重。

    取不同的值,加权平均值法将形成不同的灰度图像。由于人眼对绿色的敏感度最高,对红色的敏感度次之,对蓝色的敏感度最低,因此使 Wg > Wr > Wb 将得到比较合理的灰度图像。实验和理论推导证明,Wr = 0.299、Wg = 0.587、Wb = 0.114时,即:

    R = G = B = (0.299R + 0.587G + 0.114B)/( 0.299 + 0.587 + 0.114) = 0.299R + 0.587G + 0.114B

    此时,R、G、B 的取值就是该像素的灰度值,此时得到的灰度图像最合理。对于这个灰度值计算公式,我们并不陌生,它也是图像灰度化处理最常用的一个公式。由RGB 颜色模型和YIQ颜色模型之间线性变换公式可得:

    Y = 0.299R + 0.587G + 0.114B

    由此可见,这两个公式完全一致。

    2.3.2 灰度直方图

    灰度直方图反映一幅图像的总体灰度分布,它是灰度级的函数,描述的是图像中每一灰度级与其出现的个数,其横坐标是灰度级,纵坐标表示该灰度级出现的频数。在离散形式下,用g表示灰度级,用P(g) 表示该灰度级出现的频数,则下式成立:

    P(g) = Ng / N,0=<g<=255&&g为整数;

    式中Ng为图像中出现g这种灰度级的像素的个数,N 为图像中像素总数。在直角坐标系中作出之g和P(g)之间关系的图形就称为灰度直方图。如下就是本文处理的对象类与其对应的直方图,从右边的直方图可以看出,原图像在高灰度段,各种要素的灰度值并没有明显分开,互相混杂有其他颜色的象素,这就给通常的分色处理带来了困难。

    需要说明一点的就是,一幅图象对应一个直方图,但是一个直方图并不一定只对应一幅图象。

    展开全文
  • 基于Matlab的图像灰度级修正DIP实验1:图像灰度级修正实验目的实验内容参考代码1、调用Matlab自带函数编写2、使用自己编写的线性拉伸函数、幂律变换函数、绘制直方图函数、均衡函数实验结果![图像灰度级修正]...
  • 图像反转图像反转通过反转图像灰度值,得到照片底片,以使得当黑色面积占主导地位时,通过该操作来增强图像中的白色或灰色细节。其可以通过下面的公式表示。其中r为原图像灰度值,L为图片的灰度级...
  • 数字图像灰度处理方法

    千次阅读 2019-05-07 12:58:46
    图像灰度变换处理是图像增强处理技术中的种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的个重要组成部分。 灰度变换的几种函数: 线性变换 在曝光度不足或过度的情况下,图像...
  • 灰度变换是图像增强的种重要手段,用于改善图像显示效果,属于空间域处理方法,它可以使图像动态范围加大,使图像对比度扩展,图像更加清晰,特征更加明显。灰度变换其实质就是按一定的规则修改图像个像素的...
  • 、基于MATLAB的数字图像处理———灰度变换

    万次阅读 多人点赞 2019-04-01 22:53:42
    基于MATLAB的数字图像处理———灰度变换与空间滤波 对于图像平面,定义为二维函数 f (x,y),其中x,y分别为空间横竖坐标。当f,x,y都是有限离散值时,图像即为数字图像、图像的输入/输出和显示 相关函数: ...
  • 所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰度值的象素数。 灰度就是没有色彩, RGB色彩分量全部相等。如果是一个二值灰度图象 ,它的象素值只能为0或1 ,我们说它的...
  • 1,图像灰度的线性变换 灰度的线性变换可以突出图像中的重要信息。通常情况下,处理前后的图像灰度级是相同的,即处理前后的图像灰度级都为[0,255]。那么,从原理上讲,我们就只能通过抑制非重要信息的对比度来...
  • (三)matlab数字图像处理实验-图像灰度变换处理

    万次阅读 多人点赞 2018-01-06 18:47:37
    前两节都是熟悉一下怎么在matlab底下对图片做一些操作,并没有什么卵用,这一节稍微有点卵用,灰度变换一般是图像处理的第步。 数字图像处理实验1-9点击下列链接有源码和链接: matlab数字图像处理实验 ...
  • 一幅图像可以被定义为一个二维函数f(x,y),(x,y)为图像的空间坐标,函数f在任意一对坐标(x,y)处的幅度称为该点处图像的灰度。对(x,y)取有限的离散值(取样),对f取有限的离散值(量化)之后,得到的图像便是数字图像。 ...
  • 【OpenCV】数字图像灰度直方图

    万次阅读 多人点赞 2012-05-25 11:05:02
    灰度直方图是数字图像中最简单且有用的工具,这篇主要总结OpenCV中直方图CvHistogram的结构和应用。 灰度直方图的定义 灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):...
  • 1、 用C语言实现; 2、 对一幅图像做直方图的均衡化。 3、 对一幅256×256大小的灰度图像A(256个灰度),对图像做锐化处理得到图像B(算法不限),做图像减法A-B;
  • 1数字图像获取:1.2图像灰度直方图

    千次阅读 2020-04-10 11:13:14
    灰度直方图是反映一幅图像中各灰度级像素出现的频率与灰度级的关系。以灰度级为横坐标,频率为纵坐标绘制频率同灰度级的关系图就是一副灰度图像的直方图。他是一个图像的重要特征,反映了图像分布灰度的状况。以下是...
  • 数字图像处理】灰度图像二值化

    千次阅读 2019-10-08 00:56:27
    灰度图像 每副图像的每个像素对应二维空间中个特定的位置,并且有个或者多个与那个点相关的采样值组成数值。 灰度图像,也称为灰阶图像,图像中每个像素可以由0(黑)到255(白)的亮度值(Intensity)表示。0-255之间...
  • 绘画出图像灰度值的三维图像 方法: i=imread('a1.jpg'); if(size(i,3)>1) i=rgb2gray(i); end i=double(i); mesh(i); figure,mesh(flipdim(i,1)),title('水平镜像翻转后 这样更加符合MATLAB对于图像处理...
  • 数字图像处理 图像:用二维函数f(x,y)表示,f(x,y)是点(x,y)的幅值。 灰度级:0~255 ==》256个灰度级 层次:图像实际拥有灰度级的数量 对比度:灰度反差的大小 二值图像(binary image):图像上的每个像素...
  • 数字图像处理】四.MFC对话框绘制灰度直方图

    万次阅读 多人点赞 2015-05-31 15:22:02
    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程《数字图像处理》及课件进行回忆讲解,主要通过MFC单文档视图实现点击弹出对话框绘制BMP图片的灰度直方图,再获取平均灰度、中指灰度和...
  • 数字图像处理课程实验程序,用MFC实现了打开任何一幅位图,并可在对话框中查看其灰度直方图,已通过测试,欢迎同学们下载参考,对课程实验很有帮助
  • 一幅灰度图转换成黑白的二值图像,具体表达式为: 其作用是,将图像内容划分为关心和不关心两个部分,提取出感兴趣的特征,是图像分割的这一种重要手段。 MATLAB中有两个相关的函数:im2bw(I,level)和...
  •   灰度变换是所有图像处理技术中最简单的技术,涉及 s=T(r) s = T(r) s=T(r) 其中 T 是把像素值 r 映射到像素值 s 的种变换。   由于处理的是数字量,变换函数的值通常存储在维阵列中,并且从 r 到 s 的...
  • 数字图像处理之灰度

    万次阅读 2013-11-24 17:09:55
    所以我还是接着写吧,接下来是数字图像的相关文章,全部使用Python实现。  首先讲的是灰度化。  开始,我们先讲讲什么是灰度。  大家都知道,一幅图片有很多个像素点,对于RGB图像来说,像素点是有RGB值的。当R=G...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,283
精华内容 5,713
关键字:

一幅灰度数字图像是