转自:https://www.cnblogs.com/dearzhoubi/p/8622325.html

灰度图像的点运算可分为线性点运算和非线性点运算两种。
4.1线性点运算定义
线性点运算就是输出灰度级与输入灰度级呈线性关系的点运算。在这种情况下,灰度变换函数的形式为:

g(x, y)=pf(x,y)+L

其中 f(x,y) 为输入图像在点 (x,y) 的灰度值, g(x,y) 为相应的输出点的灰度值。显然,如果P=1和L=0,g(x,y)就是f(x,y)的复制;如果P<1,输出图像的对比度将增大;如果P>1,则对比度将减少;如果P=1而L≠0,该操作仅使所有像素的灰度值上移或下移,其效果是使整个图像在显示时更暗或更亮;如果P为负值,暗区域将变亮,亮区域将变暗,该操作完成了图像求补。

linearPOForm.cs

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 linearPOForm : Form{public linearPOForm(){InitializeComponent();}private void startLinear_Click(object sender, EventArgs e){//设置DialogResult属性this.DialogResult = DialogResult.OK;}private void close_Click(object sender, EventArgs e){this.Close();}//设置两个get访问器public string GetScaling{get{//得到斜率return scaling.Text;}}public string GetOffset{get{//得到偏移量return offset.Text;}}}
}

Form1.cs

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 Form1 : Form{public Form1(){InitializeComponent();}//文件名private string curFileName;//图像对象private System.Drawing.Bitmap curBitmpap;/// <summary>/// 打开图像文件/// </summary>private void open_Click(object sender, EventArgs e){//创建OpenFileDialogOpenFileDialog opnDlg = new OpenFileDialog();//为图像选择一个筛选器opnDlg.Filter = "所有图像文件|*.bmp;*.pcx;*.png;*.jpg;*.gif;" +"*.tif;*.ico;*.dxf;*.cgm;*.cdr;*.wmf;*.eps;*.emf|" +"位图(*.bmp;*.jpg;*.png;...)|*.bmp;*.pcx;*.png;*.jpg;*.gif;*.tif;*.ico|" +"矢量图(*.wmf;*.eps;*.emf;...)|*.dxf;*.cgm;*.cdr;*.wmf;*.eps;*.emf";//设置对话框标题opnDlg.Title = "打开图像文件";//启用“帮助”按钮opnDlg.ShowHelp = true;//如果结果为“打开”,选定文件if (opnDlg.ShowDialog() == DialogResult.OK){//读取当前选中的文件名curFileName = opnDlg.FileName;//使用Image.FromFile创建图像对象try{curBitmpap = (Bitmap)Image.FromFile(curFileName);}catch (Exception exp){MessageBox.Show(exp.Message);}}//对窗体进行重新绘制,这将强制执行paint事件处理程序Invalidate();}/// <summary>/// 在控件需要重新绘制时发生/// </summary>private void Form1_Paint(object sender, PaintEventArgs e){//获取Graphics对象Graphics g = e.Graphics;if (curBitmpap != null){//使用DrawImage方法绘制图像//160,20:显示在主窗体内,图像左上角的坐标//curBitmpap.Width, curBitmpap.Height图像的宽度和高度g.DrawImage(curBitmpap, 160, 20, curBitmpap.Width, curBitmpap.Height);}}/// <summary>/// 关闭窗体 /// </summary>private void close_Click(object sender, EventArgs e){this.Close();}private void histogram_Click(object sender, EventArgs e){if (curBitmpap != null){//定义并实例化新窗体,并把图像数据传递给它histForm histoGram = new histForm(curBitmpap);histoGram.ShowDialog();}}private void linearPO_Click(object sender, EventArgs e){if (curBitmpap!=null){//实例化linearPOForm窗体linearPOForm linearForm = new linearPOForm();//点击确定按钮if (linearForm.ShowDialog()==DialogResult.OK){Rectangle rect = new Rectangle(0, 0, curBitmpap.Width, curBitmpap.Height);System.Drawing.Imaging.BitmapData bmpData = curBitmpap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmpap.PixelFormat);IntPtr ptr = bmpData.Scan0;int bytes = curBitmpap.Width * curBitmpap.Height;byte[] grayValues = new byte[bytes];System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, 0, bytes);int temp = 0;//得到斜率double a = Convert.ToDouble(linearForm.GetScaling);//得到偏移量double b = Convert.ToDouble(linearForm.GetOffset);for (int i = 0; i < bytes; i++){//根据公式计算线性点运算//加0.5表示四舍五入temp = (int)(a * grayValues[i] + b + 0.5);//灰度值限制在0~255之间//大于255,则为255;小于0则为0if (temp>255){grayValues[i] = 255;}else if (temp<0){grayValues[i] = 0;}else{grayValues[i] = (byte)temp;}}System.Runtime.InteropServices.Marshal.Copy(grayValues, 0, ptr, bytes);curBitmpap.UnlockBits(bmpData);}Invalidate();}}}
}

【转】c#数字图像处理(四)线性点运算相关推荐

  1. 数字图像处理:线性和非线性滤波的平滑空间滤波器(Smoothing Spatial Filters)

    引言 本系列文章记录老猿自学冈萨雷斯<数字图像处理>的感悟和总结,不过估计更新会比较慢,白天要工作,都是晚上抽空学习,学习完一章再回头总结,想学的朋友可以自己下载英文原版(目前到第四版)和 ...

  2. 数字图像处理——图像的点运算

    图像的点运算 一.灰度直方图(imhist) 二.灰度线性变换(imadjust) 三.灰度非线性变换 1.灰度对数变换(log) 2.灰度幂次变换 3.灰度指数变换(exp) 四.灰度阈值变换(im ...

  3. python数字图像处理(四) 频率域滤波

    import matplotlib.pyplot as plt import numpy as np import cv2 %matplotlib inline 首先读入这次需要使用的图像 img = ...

  4. 【数字图像处理】四种常用的滤波器

    数字图像处理 四种常用滤波器 数字图像处理 一.平滑滤波器 1.1 基本原理 1.2 作用 1.3 邻域加权平均实现方式 二.高斯滤波器 2.1 基本原理 2.2 特点 三.中值滤波器 3.1 基本原 ...

  5. 数字图像处理学习--导数运算与锐化空间滤波

    引言 本文内容是老猿学习冈萨雷斯<数字图像处理>后的学习总结和感悟,中文版在介绍本文内容时翻译存在比较多的问题,本文是对中文版的完善.补充以及学习感悟的总结.在学习过程中对一些细节进行了一 ...

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

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

  7. 数字图像处理:第四章 点运算

    第四章 点运算 目录 引言 线性点运算 非线性运算 伪彩色 作业 1. 引言 点运算将输入图象映射为输出图象,输出图象每个象素点的灰度值仅由对应的输入象素点的值决定.它常用于改变图象的灰度范围及分布, ...

  8. 【计算机视觉】数字图像处理(四)—— 图像增强

    数字图像处理(四)-- 图像增强 图像增强的定义 图像增强方法 一.图像增强的点运算 (一)灰度变换 1. 线性变换 2. 分段线性变换 3. 非线性灰度变换 对数变换 指数变换 (二) 直方图修整法 ...

  9. 【基于MATLAB的数字图像处理】第四章·图像增强

    系列文章 ·[基于MATLAB的数字图像处理]第一章·绪论 ·[基于MATLAB的数字图像处理]第二章·视觉系统与图像处理系统 ·[基于MATLAB的数字图像处理]第三章·基本图像变换 ·[基于MAT ...

最新文章

  1. PHP安装与使用VLD查看opcode代码【PHP安装第三方扩展的方法】
  2. java中引用类型_您真的了解Java中的4种引用类型吗?
  3. Swift 绘图板功能完善以及终极优化
  4. AOJ GRL_1_B: Shortest Path - Single Source Shortest Path (Negative Edges) (Bellman-Frod算法求负圈和单源最短路径)
  5. 木门怎么打_旧木门拆掉改成衣柜门,完工像收破烂的,要不是能省几个钱谁干?...
  6. 同步方法 调用异步防范_Spring一个注解实现方法的异步调用,再也不用单开线程了...
  7. SpringCloud Ribbon(二)之自定义负载均衡策略IRule
  8. loading linux img2a,嵌入式Linux中initrd的应用--浅析ramdisk、ramfs、initrd和initramfs
  9. Python:程序员在每天不同时间发微信消息给女友
  10. oracle备份出现问题,TSM + Oracle备份出现问题
  11. markdown与latex:数学符号远远大于\gg和远远小于书写\ll
  12. Repository HDU - 2846 (trie)
  13. 微信小程序-图片上传功能的实现
  14. 沪江swf文件怎么打开_沪江课件播放器swf player_flash swf播放器_沪江swf播放器播放不了...
  15. 拼写纠错原理以及模型(Spelling Correction model)
  16. 看不到可用网络,网络适配器出现黄色感叹号(代码56)
  17. 分享一个大佬的网站,获取法定节假日
  18. 禁用计算机安全模式,安全模式
  19. 我参加NVIDIA Sky Hackathon(语音识别模型训练)
  20. Java募捐_GitHub - javayhu/XingShan: 使徒行善,让行善成为一种习惯

热门文章

  1. 高一计算机网络技术应用计划,高一计算机网络应用基础教学计划
  2. 【Immutable】拷贝与JSON.parse(JSON.stringify()),深度比较相等与underscore.isEqual(),性能比较...
  3. 常见三种字符编码的区别:ASCII、Unicode、UTF-8
  4. jQuery笔记——选择器
  5. linux安装mysql5.6
  6. NodeJS 学习记录
  7. james-2.3.2中的配置
  8. micropython stm32f407 以太网_[MicroPython]STM32F407开发板DIY声光控开关
  9. android activity之间传递对象,Android Activity之间的数据传递
  10. 软件测试之控制流图以及环形复杂度独立路径求解问题