【转】c#数字图像处理(四)线性点运算
转自: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#数字图像处理(四)线性点运算相关推荐
- 数字图像处理:线性和非线性滤波的平滑空间滤波器(Smoothing Spatial Filters)
引言 本系列文章记录老猿自学冈萨雷斯<数字图像处理>的感悟和总结,不过估计更新会比较慢,白天要工作,都是晚上抽空学习,学习完一章再回头总结,想学的朋友可以自己下载英文原版(目前到第四版)和 ...
- 数字图像处理——图像的点运算
图像的点运算 一.灰度直方图(imhist) 二.灰度线性变换(imadjust) 三.灰度非线性变换 1.灰度对数变换(log) 2.灰度幂次变换 3.灰度指数变换(exp) 四.灰度阈值变换(im ...
- python数字图像处理(四) 频率域滤波
import matplotlib.pyplot as plt import numpy as np import cv2 %matplotlib inline 首先读入这次需要使用的图像 img = ...
- 【数字图像处理】四种常用的滤波器
数字图像处理 四种常用滤波器 数字图像处理 一.平滑滤波器 1.1 基本原理 1.2 作用 1.3 邻域加权平均实现方式 二.高斯滤波器 2.1 基本原理 2.2 特点 三.中值滤波器 3.1 基本原 ...
- 数字图像处理学习--导数运算与锐化空间滤波
引言 本文内容是老猿学习冈萨雷斯<数字图像处理>后的学习总结和感悟,中文版在介绍本文内容时翻译存在比较多的问题,本文是对中文版的完善.补充以及学习感悟的总结.在学习过程中对一些细节进行了一 ...
- 【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片点运算处理,包括图像灰度线性变换 ...
- 数字图像处理:第四章 点运算
第四章 点运算 目录 引言 线性点运算 非线性运算 伪彩色 作业 1. 引言 点运算将输入图象映射为输出图象,输出图象每个象素点的灰度值仅由对应的输入象素点的值决定.它常用于改变图象的灰度范围及分布, ...
- 【计算机视觉】数字图像处理(四)—— 图像增强
数字图像处理(四)-- 图像增强 图像增强的定义 图像增强方法 一.图像增强的点运算 (一)灰度变换 1. 线性变换 2. 分段线性变换 3. 非线性灰度变换 对数变换 指数变换 (二) 直方图修整法 ...
- 【基于MATLAB的数字图像处理】第四章·图像增强
系列文章 ·[基于MATLAB的数字图像处理]第一章·绪论 ·[基于MATLAB的数字图像处理]第二章·视觉系统与图像处理系统 ·[基于MATLAB的数字图像处理]第三章·基本图像变换 ·[基于MAT ...
最新文章
- PHP安装与使用VLD查看opcode代码【PHP安装第三方扩展的方法】
- java中引用类型_您真的了解Java中的4种引用类型吗?
- Swift 绘图板功能完善以及终极优化
- AOJ GRL_1_B: Shortest Path - Single Source Shortest Path (Negative Edges) (Bellman-Frod算法求负圈和单源最短路径)
- 木门怎么打_旧木门拆掉改成衣柜门,完工像收破烂的,要不是能省几个钱谁干?...
- 同步方法 调用异步防范_Spring一个注解实现方法的异步调用,再也不用单开线程了...
- SpringCloud Ribbon(二)之自定义负载均衡策略IRule
- loading linux img2a,嵌入式Linux中initrd的应用--浅析ramdisk、ramfs、initrd和initramfs
- Python:程序员在每天不同时间发微信消息给女友
- oracle备份出现问题,TSM + Oracle备份出现问题
- markdown与latex:数学符号远远大于\gg和远远小于书写\ll
- Repository HDU - 2846 (trie)
- 微信小程序-图片上传功能的实现
- 沪江swf文件怎么打开_沪江课件播放器swf player_flash swf播放器_沪江swf播放器播放不了...
- 拼写纠错原理以及模型(Spelling Correction model)
- 看不到可用网络,网络适配器出现黄色感叹号(代码56)
- 分享一个大佬的网站,获取法定节假日
- 禁用计算机安全模式,安全模式
- 我参加NVIDIA Sky Hackathon(语音识别模型训练)
- Java募捐_GitHub - javayhu/XingShan: 使徒行善,让行善成为一种习惯
热门文章
- 高一计算机网络技术应用计划,高一计算机网络应用基础教学计划
- 【Immutable】拷贝与JSON.parse(JSON.stringify()),深度比较相等与underscore.isEqual(),性能比较...
- 常见三种字符编码的区别:ASCII、Unicode、UTF-8
- jQuery笔记——选择器
- linux安装mysql5.6
- NodeJS 学习记录
- james-2.3.2中的配置
- micropython stm32f407 以太网_[MicroPython]STM32F407开发板DIY声光控开关
- android activity之间传递对象,Android Activity之间的数据传递
- 软件测试之控制流图以及环形复杂度独立路径求解问题