图像处理(Image Processing) ---------- 对比拉伸 (Contrast Stretching)(C#实现)
对比拉伸也就是灰度拉伸,主要是通过改善图像灰度级的动态范围,來改善的图像品质。
如下图:将原灰度集中拉升到均匀提升图像品质。
对比拉伸的本质是使用分段函数进行的线性变换,如下图:输出图像通过牺牲 0 ~ r1 和 r2 ~ L-1 的灰度级,来使s1 ~ s2的灰度级动态范围增加,达到改善图像此区域的的品质。
三段线性拉伸的公式:假定要将原图 r1 - r2 的区域拉伸至 s1 - s2 区域。令oldl为原图灰度级,newl为新灰度级。
oldl < r1 : newl = oldl / r1 * s1 ;
r1 < oldl < r2 : newl = (oldl - r1) / (r2 - r1) * (s2 - s1) + s1 ;
oldl > r2 :newl = (oldl - r2) / (255 - r2) * (255 - s2) + s2 ;
C#实现:
//灰阶对比拉伸public Bitmap contrastStreching(Bitmap grayImage, double r1, double r2, double s1, double s2){//用LockBits的方法,效果一致。//BitmapData grayImageData = grayImage.LockBits(new Rectangle(0, 0, grayImage.Width, grayImage.Height), ImageLockMode.ReadWrite, grayImage.PixelFormat);//IntPtr intPtr = grayImageData.Scan0;//int byteSize = grayImageData.Stride * grayImageData.Height;//byte[] originalBytes = new byte[byteSize];//Marshal.Copy(intPtr, originalBytes, 0, byteSize);//double y;//for (int i = 0; i < originalBytes.Length; i++)//{// byte x = originalBytes[i];// if (x < r1)// {// y = (x / r1) * s1;// }// else if (x <= r2)// {// y = ((x - r1) / (r2 - r1)) * (s2 - s1) + s1;// }// else// {// y = ((x - r2) / (255 - r2)) * (255 - s2) + s2;// }// originalBytes[i] = (byte)Math.Round(y);//}//Marshal.Copy(originalBytes, 0, intPtr, byteSize);//grayImage.UnlockBits(grayImageData);for (int j = 0; j < grayImage.Height; j++){for (int i = 0; i < grayImage.Width; i++){double y = 0;byte value = grayImage.GetPixel(i, j).R;if (value < r1){y = (value / r1) * s1;}else if (value <= r2){y = ((value - r1) / (r2 - r1)) * (s2 - s1) + s1;}else{y = ((value - r2) / (255 - r2)) * (255 - s2) + s2;}byte s = (byte)Math.Round(y);Color newValue = Color.FromArgb(s, s, s);grayImage.SetPixel(i, j, newValue);}}return grayImage;}
仅为个人理解,如有不足,请指教。 https://blog.csdn.net/weixin_35811044
图像处理(Image Processing) ---------- 对比拉伸 (Contrast Stretching)(C#实现)相关推荐
- Win8Metro(C#)数字图像处理--2.31灰度拉伸算法
Win8Metro(C#)数字图像处理--2.31灰度拉伸算法 原文:Win8Metro(C#)数字图像处理--2.31灰度拉伸算法 [函数名称] 灰度拉伸函数GrayStretchProces ...
- 数字图像处理实验之对比度拉伸
一幅图像中,最高灰度级和最低灰度级的差成为对比度.一幅低对比度的图像,看起来细节会少很多.可以通过对比度拉伸提高图像对比度,显示更多细节.先来看看对比度拉伸的典型变换: 书本中(冈萨雷斯:数字图像处理 ...
- OpenCV图像处理算法——7(《Contrast image correction method》 论文阅读及代码实现)
<Contrast image correction method> 论文阅读及代码实现 以下内容大部分引自:https://cloud.tencent.com/developer/art ...
- 数字图像处理实验之对比度拉伸、直方图均衡化和规定化
[实验内容]: 一.运用Matlab对Lena进行对比度拉伸增强(利用 imadjust ) 二.运用Matlab对图像进行直方图均衡化和规定化 Matlab版本:R2015a 一.运用Matl ...
- 数字图像处理--图像增强之对比度拉伸
我们前面提到过图像二值化,图像反转,本质上是对图像的所有像素点的灰度进行操作,属于灰度变换的内容.灰度变换的主要目的是用于图像增强. 而对比度拉伸是图像增强的一种方法,也属于灰度变换操作.我们看如下图 ...
- 图像处理Image Processing(一)
目录 一.图像处理的原理 二.图像处理的方法 (1)将图片转换成二维数组 (2)绘制原图 (3)绘制灰度图像 (4)绘制马赛克图像 (5)绘制珠纹化图像 (6)绘制融合图像 (7)绘制轮廓图像 ( ...
- C语言数字图像处理---1.4直方图拉伸和直方图均衡化
本篇将延续上一篇的内容,对直方图进行扩展,讲述直方图拉伸和直方图均衡化两个内容,并通过简单的C语言来实现这两个基础功能,让初学者通俗易懂. 直方图拉伸 [定义与算法] 直方图拉伸也叫做 ...
- 图像处理(Image Processing) ---------- 直方图均衡化 (Equalization)(C#实现)
说到直方图均衡化,首先提一提概率论的知识. 概率论: 离散型随机变量:能用日常使用的量词度量的随机变量. 概率函数:形如 P(x = 1) = 1/6; 概率分布: 概率分布函数: . (累积概率函 ...
- 图像处理(Image Processing) ---------- 灰阶位图分割 (bit-plane slicing)(浮水印)(C#实现)
灰阶图像,通常每个Pixel是由8个bit构成,即有256种变化.然而每个Pixel的8个bit,从最高位到最低位携带的信息量是逐渐递减的.可以看下面几幅图: 右边是原图,下面就是将灰阶图每一个pi ...
最新文章
- python-range用法
- Nginx 提示host not found in upstream 错误解决方法
- OpenGL 实例化	Instancing
- php如何修改xml中element值,php修改xml节点的值
- WPF 用装饰器制作抽屉效果
- 尴尬:原来java中有两个 ModelAndView类
- Ant部署测试出错(关键字:Ant NoClassDefFoundError xml-apis/jar)
- 数据模型同学看过来|代码案例实操来袭
- orion sam mysql_JAVA/JSP学习系列之四(Orion App Server的安装)_MySQL
- 操作系统服务:OS模块
- 萤火虫小程序_玩转跨界营销,《狐妖小红娘》都使上了哪些神仙操作?
- javaweb网上购物系统,jsp网页线上购物,mysql(源码+报告)
- 哪些高级感中文Logo字体可免费商用?
- 微信小程序开发之十 —— 点击事件
- python中文库_不用下载券也能下载百度文库资料,Python帮你轻松搞定
- 第三方定量定性质谱检测技术实验
- 05-【VirtualBox】VirtualBox 导入、导出虚拟机,实现从一台电脑中的虚拟机复制到另一台电脑
- linux系统基础知识学习笔记
- 2021世界燕窝展|上海滋补品展谈孕期燕窝六问
- 未来一年商业智能的发展前景如何?
热门文章
- 数学定理百科——黑洞数
- python中三种分支结构的_python二分支结构
- verilog有符号数加减法----正负128
- 【hive 日期函数 大全】Hive常用日期函数整理 史上最全
- GaN图腾柱无桥 Boost PFC(单相)六-终极细节篇
- 求解显示常微分方程MATLAB,用matlab求解常微分方程
- 小米/红米手机刷回官方系统(红米5 plus为例),也可救砖
- input输入search查找关键词时,实现(即时搜索)边输入边输出目标内容的例子代码
- Bagging算法预测银行客户流失率
- Ubuntu 20.04 下 部署 SoftEther