c#数字图像处理(五)全等级直方图灰度拉伸
灰度拉伸也属于线性点运算的一种,也可以通过上一节的程序得到。但由于它在点运算的特殊性,所以把它单独列出来进行介绍。
灰度拉伸定义
如果一幅图像的灰度值分布在全等级灰度范围内,即在0~255之间,那么它更容易被区别确认出来。
灰度拉伸,也称对比度拉伸,是一种简单的线性点运算。它扩展图像的直方图,使其充满整个灰度等级范围内。
设f(x,y)为输入图像,它的最小灰度级A和最大灰度级B的定义为:
A=min[f(x,y) B=max[f(x,y)]
我们的目标是按照公式 g(x, y)=pf(x,y)+L , 把A和B分别线性映射到0和255,因此,最终的图像g(x,y)为:

private void stretch_Click(object sender, EventArgs e)
{
Stretch(curBitmpap, out curBitmpap);
Invalidate();
} /// <summary>
/// 全等级灰度拉伸 (图像增强)
/// </summary>
/// <param name="srcBmp">原图像</param>
/// <param name="dstBmp">处理后图像</param>
/// <returns>处理成功 true 失败 false</returns>
public static bool Stretch(Bitmap srcBmp, out Bitmap dstBmp)
{
if (srcBmp == null)
{
dstBmp = null;
return false;
}
double pR = 0.0;//斜率
double pG = 0.0;//斜率
double pB = 0.0;//斜率
byte minGrayDegree = ;
byte maxGrayDegree = ;
byte minGrayDegreeR = ;
byte maxGrayDegreeR = ;
byte minGrayDegreeG = ;
byte maxGrayDegreeG = ;
byte minGrayDegreeB = ;
byte maxGrayDegreeB = ;
dstBmp = new Bitmap(srcBmp);
Rectangle rt = new Rectangle(, , dstBmp.Width, dstBmp.Height);
BitmapData bmpData = dstBmp.LockBits(rt, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); unsafe
{
for (int i = ; i < bmpData.Height; i++)
{
byte* ptr = (byte*)bmpData.Scan0 + i * bmpData.Stride;
for (int j = ; j < bmpData.Width; j++)
{
if (minGrayDegreeR > *(ptr + j * + ))
minGrayDegreeR = *(ptr + j * + );
if (maxGrayDegreeR < *(ptr + j * + ))
maxGrayDegreeR = *(ptr + j * + );
if (minGrayDegreeG > *(ptr + j * + ))
minGrayDegreeG = *(ptr + j * + );
if (maxGrayDegreeG < *(ptr + j * + ))
maxGrayDegreeG = *(ptr + j * + );
if (minGrayDegreeB > *(ptr + j * ))
minGrayDegreeB = *(ptr + j * );
if (maxGrayDegreeB < *(ptr + j * ))
maxGrayDegreeB = *(ptr + j * );
}
}
pR = 255.0 / (maxGrayDegreeR - minGrayDegreeR);
pG = 255.0 / (maxGrayDegreeG - minGrayDegreeG);
pB = 255.0 / (maxGrayDegreeB - minGrayDegreeB);
for (int i = ; i < bmpData.Height; i++)
{
byte* ptr1 = (byte*)bmpData.Scan0 + i * bmpData.Stride;
for (int j = ; j < bmpData.Width; j++)
{
*(ptr1 + j * ) = (byte)((*(ptr1 + j * ) - minGrayDegreeB) * pB + 0.5);
*(ptr1 + j * + ) = (byte)((*(ptr1 + j * + ) - minGrayDegreeG) * pG + 0.5);
*(ptr1 + j * + ) = (byte)((*(ptr1 + j * + ) - minGrayDegreeR) * pR + 0.5);
}
}
}
dstBmp.UnlockBits(bmpData);
return true;
}

增强后:

c#数字图像处理(五)全等级直方图灰度拉伸的更多相关文章
- Win8 Metro(C#)数字图像处理--3.3图像直方图计算
原文:Win8 Metro(C#)数字图像处理--3.3图像直方图计算 /// <summary> /// Get the array of histrgram. /// </sum ...
- 数字图像处理(一)之灰度转换和卷积python实现
使用Python实现数字图像处理中如下功能: 彩色图像转成灰度图像 实现图像的相关&卷积操作 实现图像的高斯核卷积 使用的库和python版本如下: imageio:2.9.0 用于读取磁盘中 ...
- c#数字图像处理(六)直方图均衡化
直方图均衡化又称直方图修平,是一种很重要的非线性点运算.使用该方法可以加强图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候.通过这种方法,亮度可以更好的在直方图上分布. 直方图均衡化的基 ...
- c#数字图像处理(二)彩色图像灰度化,灰度图像二值化
为加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像,在灰度图像上得到验证的算法,很容易移植到彩色图像上.24位彩色图像每个像素用3个字节表示,每个字节对应着R.G.B分量的亮度(红.绿 ...
- c#数字图像处理(七)直方图匹配
直方图匹配,又称直方图规定化,即变换原图的直方图为规定的某种形式的直方图,从而使两幅图像具有类似的色调和反差.直方图匹配属于非线性点运算. 直方图规定化的原理:对两个直方图都做均衡化,变成相同的归一化 ...
- Win8Metro(C#)数字图像处理--2.31灰度拉伸算法
原文:Win8Metro(C#)数字图像处理--2.31灰度拉伸算法 [函数名称] 灰度拉伸函数GrayStretchProcess(WriteableBitmap src) [算法说明] ...
- 【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理具体解释
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说.主要通过MFC单文档视图实现显示BMP图片点运算处理.包含图像灰度线性变换 ...
- OpenCV-跟我一起学数字图像处理之直方图均衡化
从这篇博文开始,小生正式从一个毫不相干专业转投数字图像处理.废话不多说了,talk is cheap. show me the code. 直方图均衡化目的 由于一些图像灰度的分布过于集中,这样会导致 ...
- Win8Metro(C#)数字图像处理--2.30直方图均衡化
原文:Win8Metro(C#)数字图像处理--2.30直方图均衡化 [函数名称] 直方图均衡化函数HistogramEqualProcess(WriteableBitmap src) [算法说明] ...
随机推荐
- luoguP4313 文理分科
luoguP4313 文理分科 复习完之后做了道典型题目. 这道题条件有点多 我们逐个分析 如果没有\(sameart\)或者\(samescience\)的限制,就是一个裸的最大权闭合子图的问题了 ...
- Trie 树的一些题
Trie 树的一些题 牛客练习赛11 假的字符串 (Trie树+拓扑找环) 链接:https://ac.nowcoder.com/acm/problem/15049 来源:牛客网 给定n个字符串,互不 ...
- 【Docker】安装MySQL彻底解决3306端口占用问题
1.问题闪现: 初次up mysql报3306端口被占用 yunduo@YunDuo:~/Work/Learning/Docker/docker_compose$ docker-compose up ...
- windows系统锁屏及修改密码项目开发经验记录
改造windows开机.锁屏登录流程需要使用微软停供的Credential Providers工程,编译出来是dll,安装在C:\windows\system32目录下,然后注册注册表(运行工程生成的 ...
- boostrap-非常好用但是容易让人忽略的地方【7】:list-unstyled list-inline
无样式列表 list-unstyled:去掉ul的默认样式 内联列表 list-inline:将ul子元素放置于同一行
- python 找出字符串中出现次数最多的字母
# 请大家找出s=”aabbccddxxxxffff”中 出现次数最多的字母 # 第一种方法,字典方式: s="aabbccddxxxxffff" count ={} for i ...
- sed & awk & grep 专题
转载自:http://www.cnblogs.com/moveofgod/p/3540575.html grep, sed 与 awk 相当有用 ! gerp 查找, sed 编辑, awk 根据内容 ...
- Linux 命令整理 vim
Vim 一.官方网站 http://www.vim.org 二.背景 所有的 Unix Like 系统都会内建 vi 文书编辑器,但是在我们编程这里开发使用最多的要数 vim命令了. 三.操作 三种 ...
- 用ubuntu里的vim搭建一个apache2+php+mysql环境一路踩的坑
先是安装apache2,这个很顺利,一个apt install apache就搞定了. (PS:查看linux是否已经安装了apache服务,可以通过执行apachectl -v,如果安装了的话会显示 ...
- docker(整理中
docker镜像默认的下载地址就是docker的官网,而他们的官网在国内没有节点,时不时就被国家防火墙隔绝,会出现DNS解析不到,或者找不到镜像等狗血提示. 解决的方法有三个: 第一,就是不断尝试,因 ...