图像直方图均衡化(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;
        }
时间: 2024-11-05 09:13:24

图像直方图均衡化(C#)的相关文章

图像直方图均衡化增强opencv与C语言版

本文实现彩色图像的全局直方图均衡.分别对R/G/B三通道均衡,读写图片采用OpenCV.代码如下: #include <opencv2/opencv.hpp> //#include <cv.h> //#include <cxcore.h> //#include <highgui.h> #include <time.h> #include <stdio.h> #include <math.h> #include "

Python实现图像直方图均衡化算法

title: "Python实现图像直方图均衡化算法" date: 2018-06-12T17:10:48+08:00 tags: [""] categories: ["python"] 效果图 代码 #!/usr/bin/env python3 # coding=utf-8 import matplotlib.image as mpimg from matplotlib import pyplot as plt import sys impor

opencv图像直方图均衡化及其原理

直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均衡化作用:用来增强对比度. 这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候.通过这种方法,亮度可以更好地在直方图上分布.这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能. 这种方法对于背景和前景都太亮或者太

图像直方图均衡化

1. 直方图均衡化介绍 自我感觉书上讲的很清楚,直接把截图贴上了. 在进行直方图均值化的过程如下 读入图像对每个通道分别统计像素值[0,255]出现的次数.对每个通道分别求像素值[0,255]出现的概率,得到概率直方图.对每个通道分别求像素值[0,255]概率的前缀和,得到累计直方图.对每个通道根据累计直方图分别求像素映射函数.对每个通道完成每个像素点的映射.输出直方图均衡化的图像.2.代码(MATLAB) 1 %直方图均衡化 2 I = imread('D:/picture/girl.jpg'

opencv:图像直方图均衡化

// 直方图均衡化 Mat gray, dst; cvtColor(src, gray, COLOR_BGR2GRAY); equalizeHist(gray, dst); imshow("gray", gray); imshow("equalizeHist", dst); 原文地址:https://www.cnblogs.com/wbyixx/p/12246837.html

图像直方图与直方图均衡化

图像直方图与直方图均衡化 图像直方图以及灰度与彩色图像的直方图均衡化 图像直方图: 概述: 图像的直方图用来表征该图像像素值的分布情况.用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目. 图像直方图图形化显示不同的像素值在不同的强度值上的出现频率,对于灰度图像来说强度范围为[0~255]之间,对于RGB的彩色图像可以独立显示三种颜色的图像直方图. 同时直方图是用来寻找灰度图像二值化阈值常用而且是有效的手段之一,如果一幅灰度图像的直方图显示为两个波

《OpenCV:直方图应用:直方图均衡化,直方图匹配,对比直方图》

直方图均衡化 直方图均衡化(Histogram Equalization)是直方图最典型的应用,是图像点运算的一种.对于一幅输入图像,通过运算产生一幅输出图像,点运算是指输出图像的每个像素点的灰度值由输入像素点决定,即: 直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数过程.从分布图上的理解就是希望原始图像中y轴的值在新的分布中尽可能的展开.变换过程是利用累积分布函数对原始分布进行映射,生成新的均匀拉伸的分布.因此对应每个点的操作是寻找原始分布

python实现直方图均衡化,理想高通滤波与高斯低通滤波

写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化,实验算法仅供参考. 实验要求 实现图像直方图均衡化,要求显示均衡化前.后直方图以及均衡化后图像. 对单通道图像进行DFT变换,要求显示幅度图和相位图,并设计理想高通滤波器和高斯低通滤波器对图像进行频域滤波,并显示滤波之后的图像. 注:除DFT和IDFT外,不允许调库 实验代码 代码首先贴在这里,仅供

图像锐化与直方图均衡化

图像锐化和直方图均衡化虽然效果上都是增强对比度的,都是图像增强,但是还是有一些区别的. 图像锐化 图像锐化是突出图像的边缘(高频部分),增强边界像素的对比度,使边缘处像素黑的更黑,白的跟白 因此简单的锐化就是      原图像 + 边缘图像*系数 锐化的模板的所有系数相加要等于1 比如可以使用模板 或者 其中可以简单的看成是8领域的拉普拉斯算子的边缘图+原图,因为中心系数加1表示加上了原图的像素值.所以该模板就等于原图像 + 边缘图像*1 直方图均衡化 在我的博客http://blog.csdn