zoukankan      html  css  js  c++  java
  • 图像直方图均衡化(C#)

    关于图像直方图均衡化的原理和步骤先不作讨论,我就看看代码吧。

      private Bitmap picequalization(Bitmap basemap, int width, int height)
            {
                Bitmap retmap = new Bitmap(basemap, width, height);
                int size = width * height;
                int[] gray = new int[256];
                double[] graydense = new double[256];
                for(int i=0;i<width;++i)
                    for (int j = 0; j < height; ++j)
                    {
                        Color pixel = basemap.GetPixel(i,j);
                        gray[Convert.ToInt16(pixel.R)] += 1;
                    }
                for (int i = 0; i < 256; i++)
                {
                    graydense[i] = (gray[i]*1.0) / size;
                }
    
                for (int i = 1; i < 256; i++)
                {
                    graydense[i] += graydense[i-1];
                }
    
                for (int i = 0; i < width; ++i)
                    for (int j = 0; j < height; ++j)
                    {
                        Color pixel = basemap.GetPixel(i, j);
                        int gg = Convert.ToInt16(pixel.R);
                        int g = 0;
                        if(gg==0)
                           g=0;
                        else
                        g =Convert.ToInt16( graydense[Convert.ToInt16(pixel.R)] * Convert.ToInt16(pixel.R));
                        
                        pixel = Color.FromArgb(g,g,g);
                        retmap.SetPixel(i, j, pixel);
                        //gray[Convert.ToInt16(pixel.R)] += 1;
                    }
                    return retmap;
            }
     private Bitmap rgb2gray(Bitmap basemap,int width,int height)
            {
                Bitmap retmap = new Bitmap(basemap, width, height);
                for (int i = 0; i < width; ++i)
                    for (int j = 0; j < height; ++j)
                    {
                        Color pixel = basemap.GetPixel(i, j);
                        pixel = getgray(Convert.ToByte(pixel.R), Convert.ToByte(pixel.G), Convert.ToByte(pixel.B));
                        retmap.SetPixel(i, j, pixel);
                    }
                        return retmap;
            }
    
            private Color  getgray(int r, int g, int b)
            {
                int gray = 0;
                gray = (r * 30 + g * 59 + b * 11 + 50) / 100;
    
                Color retcolor = Color.FromArgb(gray,gray,gray);
                return retcolor;
                }
            /// <summary>
            /// 获取直方图数据
            /// </summary>
            /// <param name="rule"></param>
            /// <param name="width"></param>
            /// <param name="height"></param>
            /// <returns></returns>
            private double[] getsquare(Bitmap rule, int width, int height)
            {
                //double[] rule = new double[256];
                int sizerule = width * height;
                int[] grayrule = new int[256];
                double[] grayruledense = new double[256];
                for (int i = 0; i < width; ++i)
                    for (int j = 0; j < height; ++j)
                    {
                        Color pixel = rule.GetPixel(i, j);
                        grayrule[Convert.ToInt16(pixel.R)] += 1;
                    }
                for (int i = 0; i < 256; i++)
                {
                    grayruledense[i] = (grayrule[i] * 1.0) / sizerule;
                }
                return grayruledense;
            }
    
            private double[] getrule(Bitmap rule, int rulewidth, int heightrule)
            {
                //double[] rule = new double[256];
                int sizerule = rulewidth * heightrule;
                int[] grayrule = new int[256];
                double[] grayruledense = new double[256];
                for (int i = 0; i < rulewidth; ++i)
                    for (int j = 0; j < heightrule; ++j)
                    {
                        Color pixel = rule.GetPixel(i, j);
                        grayrule[Convert.ToInt16(pixel.R)] += 1;
                    }
                for (int i = 0; i < 256; i++)
                {
                    grayruledense[i] = (grayrule[i] * 1.0) / sizerule;
                }
                return grayruledense;
            }
            private double[] getdense(double[] zhifang)
            {
                for (int i = 1; i < 256; i++)
                {
                    zhifang[i] += zhifang[i - 1];
                }
                return zhifang;
            }
  • 相关阅读:
    CF1236B Alice and the List of Presents |数学
    luogu P1832 A+B Problem |背包
    CF832D Misha, Grisha and Underground |LCA
    bzoj1709[Usaco2007 Oct]Super Paintball超级弹珠*
    bzoj3314[Usaco2013 Nov]Crowded Cows*
    bzoj4300绝世好题
    bzoj2101[Usaco2010 Dec]Treasure Chest 藏宝箱*
    bzoj3437小P的牧场
    bzoj2016[Usaco2010]Chocolate Eating*
    bzoj2015[Usaco2010 Feb]Chocolate Giving*
  • 原文地址:https://www.cnblogs.com/jesszhu/p/4231921.html
Copyright © 2011-2022 走看看