• 模式识别---图像二值化


    要对图像进行识别,首先要做的将图像从多通道颜色分量变为单通道,也就是gray色调中来,常用的方法有目下三种,

    第一种

     求rgb颜色风量的平均值: 

              G(x,y) =(r(x,y)+g(x,y)+b(x,y))/3.

    第二种:

           视觉心理学公式:

             G(x,y)= r(x,y)*299 + g(x,y)*587 + b(x,y)*114/1000

    还有一种:

           G(x,y) = r(x,y)*0.11 + g(x,y)*0.59 + b(x,y)*0.3;

    第三种: Adobe Photoshop 采取的公式 

         Adobe RGB (1998) [gamma=2.20] 
         Gray = (R^2.2 * 0.2973 + G^2.2 * 0.6274 + B^2.2 * 0.0753)^(1/2.2)

    速度依次变慢,效果逐渐变好.

    采用第二种效果进行将彩色图片灰度化:(关键代码)

     1   for(int i=0;i<cinfo.image_width;i++) {
     2                color_r = (int)buffer[0][i*3];
     3                color_g = (int)buffer[0][i*3+1];
     4                color_b = (int)buffer[0][i*3+2];
     5                var_gray = 0.11*color_r+0.59*color_g+0.3*color_b;
     6                if(var_gray<0) var_gray=0;
     7                //else var_gray =255;
     8                buffer[0][i*3]=(unsigned char)(var_gray&0xff);
     9                buffer[0][i*3+1]=(unsigned char)(var_gray&0xff);
    10                buffer[0][i*3+2]=(unsigned char)(var_gray&0xff);
    11            }

    效果图:

       

    一般进过从多通道颜色分量处理之后,就需要对图像进行腐蚀,然后得到二值化图像。需要设定一个阈值,进行单纯的判断,这是最简单的方式

     1   for(int i=0;i<cinfo.image_width;i++) {
     2                color_r = (int)buffer[0][i*3];
     3                color_g = (int)buffer[0][i*3+1];
     4                color_b = (int)buffer[0][i*3+2];
     5                var_gray = 0.11*color_r+0.59*color_g+0.3*color_b;
     6                if(var_gray<128) var_gray=0;
     7                else var_gray =255;
     8                buffer[0][i*3]=(unsigned char)(var_gray&0xff);
     9                buffer[0][i*3+1]=(unsigned char)(var_gray&0xff);
    10                buffer[0][i*3+2]=(unsigned char)(var_gray&0xff);
    11            }

    效果图:

  • 相关阅读:
    Remove Duplicates from Sorted Array
    Longest Valid Parentheses
    Valid Parentheses
    Java [Leetcode 112]Path Sum
    Java [Leetcode 119]Pascal's Triangle II
    Java [Leetcode 102]Binary Tree Level Order Traversal
    Java [Leetcode 172]Factorial Trailing Zeroes
    奇异值分解(转载)
    Java [Leetcode 118]Pascal's Triangle
    Java [Leetcode 66]Plus One
  • 原文地址:https://www.cnblogs.com/gongxijun/p/5118719.html
Copyright © 2020-2023  润新知