灰度直方图是灰度的函数,描述的是图像中具有该灰度级的像素的个数。如果用直角坐标系来表示,则它的横坐标是灰度级,纵坐标是该灰度出现的概率(像素的个数)。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace histogram
{
public partial class histForm : Form
{
//利用构造函数实现窗体之间的数据传递
public histForm(Bitmap bmp)
{
InitializeComponent(); //把主窗体的图像数据传递给从窗体
bmpHist = bmp;
//灰度级计数
countPixel = new int[]; //8位可表示256个灰度级
} private void close_Click(object sender, EventArgs e)
{
this.Close();
} //图像数据
private System.Drawing.Bitmap bmpHist;
//灰度等级
private int[] countPixel;
//记录最大的灰度级个数
private int maxPixel; /// <summary>
/// 计算各个灰度级所具有的像素个数
/// </summary>
private void histForm_Load(object sender, EventArgs e)
{
//锁定8位灰度位图
Rectangle rect = new Rectangle(, , bmpHist.Width, bmpHist.Height);
System.Drawing.Imaging.BitmapData bmpData = bmpHist.LockBits(rect,
System.Drawing.Imaging.ImageLockMode.ReadWrite, bmpHist.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = bmpHist.Width * bmpHist.Height;
byte[] grayValues = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, , bytes);//灰度值数据存入grayValues中 byte temp = ;
maxPixel = ;
//灰度等级数组清零
Array.Clear(countPixel, , );
//计算各个灰度级的像素个数
for (int i = ; i < bytes; i++)
{
//灰度级
temp = grayValues[i];
//计数加1
countPixel[temp]++;
if (countPixel[temp] > maxPixel)
{
//找到灰度频率最大的像素数,用于绘制直方图
maxPixel = countPixel[temp];
}
} //解锁
System.Runtime.InteropServices.Marshal.Copy(grayValues, , ptr, bytes);
bmpHist.UnlockBits(bmpData);
} /// <summary>
/// 绘制直方图
/// </summary>
private void histForm_Paint(object sender, PaintEventArgs e)
{
//获取Graphics对象
Graphics g = e.Graphics; //创建一个宽度为1的黑色钢笔
Pen curPen = new Pen(Brushes.Black, ); //绘制坐标轴
g.DrawLine(curPen, , , , );//横坐标
g.DrawLine(curPen, , , , );//纵坐标 //绘制并标识坐标刻度
g.DrawLine(curPen, , , , );
g.DrawLine(curPen, , , , );
g.DrawLine(curPen, , , , );
g.DrawLine(curPen, , , , );
g.DrawLine(curPen, , , , );
g.DrawString("", new Font("New Timer", ), Brushes.Black, new PointF(, ));
g.DrawString("", new Font("New Timer", ), Brushes.Black, new PointF(,));
g.DrawString("", new Font("New Timer", ), Brushes.Black, new PointF(, ));
g.DrawString("", new Font("New Timer", ), Brushes.Black, new PointF(, ));
g.DrawString("", new Font("New Timer", ), Brushes.Black, new PointF(, ));
g.DrawString("", new Font("New Timer", ), Brushes.Black, new PointF(, ));
g.DrawLine(curPen, , , , );
g.DrawString("", new Font("New Timer", ), Brushes.Black, new PointF(, ));
g.DrawString(maxPixel.ToString(), new Font("New Timer", ), Brushes.Black, new PointF(, )); //绘制直方图
double temp = ;
for (int i = ; i < ; i++)
{
//纵坐标长度
temp = 200.0 * countPixel[i] / maxPixel;
g.DrawLine(curPen, + i, , + i, - (int)temp);
}
//释放对象
curPen.Dispose();
}
}
}

c#数字图像处理(三)灰度直方图的更多相关文章

  1. Win8Metro(C#)数字图像处理--2.30直方图均衡化

    原文:Win8Metro(C#)数字图像处理--2.30直方图均衡化 [函数名称] 直方图均衡化函数HistogramEqualProcess(WriteableBitmap src) [算法说明] ...

  2. Java基于opencv实现图像数字识别(三)—灰度化和二值化

    Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...

  3. Win8Metro(C#)数字图像处理--2.34直方图规定化

    原文:Win8Metro(C#)数字图像处理--2.34直方图规定化  [函数名称] WriteableBitmap HistogramSpecificateProcess(WriteableBi ...

  4. 【16位RAW图像处理三】直方图均衡化及局部直方图均衡用于16位图像的细节增强。

    通常我们生活中遇到的图像,无论是jpg.还是png或者bmp格式,一般都是8位的(每个通道的像素值范围是0-255),但是随着一些硬件的发展,在很多行业比如医疗.红外.航拍等一些场景下,拥有更宽的量化 ...

  5. 【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理具体解释

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说.主要通过MFC单文档视图实现显示BMP图片点运算处理.包含图像灰度线性变换 ...

  6. OpenCV-跟我一起学数字图像处理之直方图均衡化

    从这篇博文开始,小生正式从一个毫不相干专业转投数字图像处理.废话不多说了,talk is cheap. show me the code. 直方图均衡化目的 由于一些图像灰度的分布过于集中,这样会导致 ...

  7. Win8Metro(C#)数字图像处理--2.31灰度拉伸算法

    原文:Win8Metro(C#)数字图像处理--2.31灰度拉伸算法  [函数名称] 灰度拉伸函数GrayStretchProcess(WriteableBitmap src) [算法说明]    ...

  8. Win8MetroC#数字图像处理--2.1图像灰度化

    原文:Win8MetroC#数字图像处理--2.1图像灰度化   [函数说明] 图像灰度化函数GrayProcess(WriteableBitmap src) [算法说明]   图像灰度化就是去掉彩色 ...

  9. 数字图像处理(一)之灰度转换和卷积python实现

    使用Python实现数字图像处理中如下功能: 彩色图像转成灰度图像 实现图像的相关&卷积操作 实现图像的高斯核卷积 使用的库和python版本如下: imageio:2.9.0 用于读取磁盘中 ...

随机推荐

  1. onload事件属性,JQ中的load,ready方法

    onload事件属性,JQ中的load,ready方法 前言 页面中的很多操作,需要我们在所需资源下载完成后,才可以进行操作,而资源没有及时下载,我们进行操作的话,是会报错.因此我们需要熟练掌握哪些事 ...

  2. supported platform

    Target name Platform Architecture Endianness Developer(s) Known Issues/Notes adm5120 Infineon/ADMtek ...

  3. Python14_中TK模块使用总结

    事件的绑定: https://www.cnblogs.com/jerryspace/p/9836142.html https://www.cnblogs.com/progor/p/8505599.ht ...

  4. LabWindows/CVI基础

    1.LabWindows/CVI了解 提到NI公司,大家可能最先联想到的是NI公司推出的LabVIEW软件.LabWindows/CVI与LabVIEW相比,主要应用在各种测试.控制.故障分析及信息处 ...

  5. jQuery无new创建对象原理

    // jQuery 无new 创建对象套路 (function(g,undefined){ var foo = function(){ return new foo.fn.init(); }; foo ...

  6. Jmeter阶梯加压监听

    巧用beanshell,做阶梯加压监听 1. 首先先添加阶梯加压线程组  bzm - Concurrency Thread Group 设置阶梯加压值,目标最大并发用户为80,加速步率时长为100秒, ...

  7. HTML基础常识

    什么是HTML? 超文本标记语言,用来制作网页 浏览器常识: 常见浏览器: 谷歌(Chrome).苹果(Safari) . IE(Edge).欧朋(Opera).火狐(Firefox) 浏览器内核:浏 ...

  8. Zeus,一个可以快速使用微服务组件

    去年(上周)一直准备着做一个分布式微服务的组件,可以让使用者用最简单的方式引入,只需要使用简单的注解就能够使用. 用一点一点的空闲时间终于堆出来一个暂时可用的zeus-1.0版本. Zeus,意为宙斯 ...

  9. 基于ambassador实现K8S灰度发布

    为什么需要灰度发布 灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式.在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对 ...

  10. 为你写诗:3 步搭建 Serverless AI 应用

    作者 | 杜万(倚贤) 阿里巴巴技术专家 本文整理自 1 月 2 日社群分享,每月 2 场高质量分享,点击加入社群. 关注"阿里巴巴云原生"公众号,回复关键词 0102 即可下载本 ...