日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2023/12/10 C# 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】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#数字图像处理(四)线性点运算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。