基本信息
源码名称:c#数字形态学图像处理
源码大小:0.22M
文件格式:.zip
开发语言:C#
更新时间:2018-04-09
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 3 元×
微信扫码支付:3 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
c#数字形态学图像处理
c#数字形态学图像处理
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace morphology
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void open_Click(object sender, EventArgs e)
{
OpenFileDialog 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;
try
{
curBitmap = (Bitmap)Image.FromFile(curFileName);
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
Invalidate();
}
private void close_Click(object sender, EventArgs e)
{
this.Close();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
if (curBitmap != null)
{
g.DrawImage(curBitmap, 160, 20, curBitmap.Width, curBitmap.Height);
}
}
private void erode_Click(object sender, EventArgs e)
{
if (curBitmap != null)
{
struction struForm = new struction();
struForm.Text = "腐蚀运算结构元素";
if (struForm.ShowDialog() == DialogResult.OK)
{
Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height);
System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = curBitmap.Width * curBitmap.Height;
byte[] grayValues = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, 0, bytes);
byte flagStru = struForm.GetStruction;
byte[] tempArray = new byte[bytes];
for (int i = 0; i < bytes; i )
{
tempArray[i] = 255;
}
switch (flagStru)
{
case 0x11:
for (int i = 0; i < curBitmap.Height; i )
{
for (int j = 1; j < curBitmap.Width - 1; j )
{
if (grayValues[i * curBitmap.Width j] == 0 &&
grayValues[i * curBitmap.Width j 1] == 0 &&
grayValues[i * curBitmap.Width j - 1] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x21:
for (int i = 0; i < curBitmap.Height; i )
{
for (int j = 2; j < curBitmap.Width - 2; j )
{
if (grayValues[i * curBitmap.Width j] == 0 &&
grayValues[i * curBitmap.Width j 1] == 0 &&
grayValues[i * curBitmap.Width j - 1] == 0 &&
grayValues[i * curBitmap.Width j 2] == 0 &&
grayValues[i * curBitmap.Width j - 2] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x12:
for (int i = 1; i < curBitmap.Height - 1; i )
{
for (int j = 0; j < curBitmap.Width; j )
{
if (grayValues[i * curBitmap.Width j] == 0 &&
grayValues[(i - 1) * curBitmap.Width j] == 0 &&
grayValues[(i 1) * curBitmap.Width j] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x22:
for (int i = 2; i < curBitmap.Height - 2; i )
{
for (int j = 0; j < curBitmap.Width; j )
{
if (grayValues[i * curBitmap.Width j] == 0 &&
grayValues[(i - 1) * curBitmap.Width j] == 0 &&
grayValues[(i 1) * curBitmap.Width j] == 0 &&
grayValues[(i - 2) * curBitmap.Width j] == 0 &&
grayValues[(i 2) * curBitmap.Width j] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x14:
for (int i = 1; i < curBitmap.Height - 1; i )
{
for (int j = 1; j < curBitmap.Width - 1; j )
{
if (grayValues[i * curBitmap.Width j] == 0 &&
grayValues[(i - 1) * curBitmap.Width j] == 0 &&
grayValues[(i 1) * curBitmap.Width j] == 0 &&
grayValues[i * curBitmap.Width j 1] == 0 &&
grayValues[i * curBitmap.Width j - 1] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x24:
for (int i = 2; i < curBitmap.Height - 2; i )
{
for (int j = 2; j < curBitmap.Width - 2; j )
{
if (grayValues[i * curBitmap.Width j] == 0 &&
grayValues[(i - 1) * curBitmap.Width j] == 0 &&
grayValues[(i 1) * curBitmap.Width j] == 0 &&
grayValues[(i - 2) * curBitmap.Width j] == 0 &&
grayValues[(i 2) * curBitmap.Width j] == 0 &&
grayValues[i * curBitmap.Width j 1] == 0 &&
grayValues[i * curBitmap.Width j - 1] == 0 &&
grayValues[i * curBitmap.Width j 2] == 0 &&
grayValues[i * curBitmap.Width j - 2] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x18:
for (int i = 1; i < curBitmap.Height - 1; i )
{
for (int j = 1; j < curBitmap.Width - 1; j )
{
if (grayValues[i * curBitmap.Width j] == 0 &&
grayValues[(i - 1) * curBitmap.Width j] == 0 &&
grayValues[(i 1) * curBitmap.Width j] == 0 &&
grayValues[i * curBitmap.Width j 1] == 0 &&
grayValues[i * curBitmap.Width j - 1] == 0 &&
grayValues[(i - 1) * curBitmap.Width j - 1] == 0 &&
grayValues[(i 1) * curBitmap.Width j - 1] == 0 &&
grayValues[(i - 1) * curBitmap.Width j 1] == 0 &&
grayValues[(i 1) * curBitmap.Width j 1] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x28:
for (int i = 2; i < curBitmap.Height - 2; i )
{
for (int j = 2; j < curBitmap.Width - 2; j )
{
if (grayValues[(i - 2) * curBitmap.Width j - 2] == 0 &&
grayValues[(i - 2) * curBitmap.Width j - 1] == 0 &&
grayValues[(i - 2) * curBitmap.Width j] == 0 &&
grayValues[(i - 2) * curBitmap.Width j 1] == 0 &&
grayValues[(i - 2) * curBitmap.Width j 2] == 0 &&
grayValues[(i - 1) * curBitmap.Width j - 2] == 0 &&
grayValues[(i - 1) * curBitmap.Width j - 1] == 0 &&
grayValues[(i - 1) * curBitmap.Width j] == 0 &&
grayValues[(i - 1) * curBitmap.Width j 1] == 0 &&
grayValues[(i - 1) * curBitmap.Width j 2] == 0 &&
grayValues[i * curBitmap.Width j - 2] == 0 &&
grayValues[i * curBitmap.Width j - 1] == 0 &&
grayValues[i * curBitmap.Width j] == 0 &&
grayValues[i * curBitmap.Width j 1] == 0 &&
grayValues[i * curBitmap.Width j 2] == 0 &&
grayValues[(i 2) * curBitmap.Width j - 2] == 0 &&
grayValues[(i 2) * curBitmap.Width j - 1] == 0 &&
grayValues[(i 2) * curBitmap.Width j] == 0 &&
grayValues[(i 2) * curBitmap.Width j 1] == 0 &&
grayValues[(i 2) * curBitmap.Width j 2] == 0 &&
grayValues[(i 1) * curBitmap.Width j - 2] == 0 &&
grayValues[(i 1) * curBitmap.Width j - 1] == 0 &&
grayValues[(i 1) * curBitmap.Width j] == 0 &&
grayValues[(i 1) * curBitmap.Width j 1] == 0 &&
grayValues[(i 1) * curBitmap.Width j 2] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
default:
MessageBox.Show("错误的结构元素!");
break;
}
grayValues = (byte[])tempArray.Clone();
System.Runtime.InteropServices.Marshal.Copy(grayValues, 0, ptr, bytes);
curBitmap.UnlockBits(bmpData);
}
Invalidate();
}
}
private void dilate_Click(object sender, EventArgs e)
{
if (curBitmap != null)
{
struction struForm = new struction();
struForm.Text = "膨胀运算结构元素";
if (struForm.ShowDialog() == DialogResult.OK)
{
Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height);
System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = curBitmap.Width * curBitmap.Height;
byte[] grayValues = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, 0, bytes);
byte flagStru = struForm.GetStruction;
byte[] tempArray = new byte[bytes];
for (int i = 0; i < bytes; i )
{
tempArray[i] = 255;
}
switch (flagStru)
{
case 0x11:
for (int i = 0; i < curBitmap.Height; i )
{
for (int j = 1; j < curBitmap.Width - 1; j )
{
if (grayValues[i * curBitmap.Width j] == 0 ||
grayValues[i * curBitmap.Width j 1] == 0 ||
grayValues[i * curBitmap.Width j - 1] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x21:
for (int i = 0; i < curBitmap.Height; i )
{
for (int j = 2; j < curBitmap.Width - 2; j )
{
if (grayValues[i * curBitmap.Width j] == 0 ||
grayValues[i * curBitmap.Width j 1] == 0 ||
grayValues[i * curBitmap.Width j - 1] == 0 ||
grayValues[i * curBitmap.Width j 2] == 0 ||
grayValues[i * curBitmap.Width j - 2] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x12:
for (int i = 1; i < curBitmap.Height - 1; i )
{
for (int j = 0; j < curBitmap.Width; j )
{
if (grayValues[i * curBitmap.Width j] == 0 ||
grayValues[(i - 1) * curBitmap.Width j] == 0 ||
grayValues[(i 1) * curBitmap.Width j] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x22:
for (int i = 2; i < curBitmap.Height - 2; i )
{
for (int j = 0; j < curBitmap.Width; j )
{
if (grayValues[i * curBitmap.Width j] == 0 ||
grayValues[(i - 1) * curBitmap.Width j] == 0 ||
grayValues[(i 1) * curBitmap.Width j] == 0 ||
grayValues[(i - 2) * curBitmap.Width j] == 0 ||
grayValues[(i 2) * curBitmap.Width j] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x14:
for (int i = 1; i < curBitmap.Height - 1; i )
{
for (int j = 1; j < curBitmap.Width - 1; j )
{
if (grayValues[i * curBitmap.Width j] == 0 ||
grayValues[(i - 1) * curBitmap.Width j] == 0 ||
grayValues[(i 1) * curBitmap.Width j] == 0 ||
grayValues[i * curBitmap.Width j 1] == 0 ||
grayValues[i * curBitmap.Width j - 1] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x24:
for (int i = 2; i < curBitmap.Height - 2; i )
{
for (int j = 2; j < curBitmap.Width - 2; j )
{
if (grayValues[i * curBitmap.Width j] == 0 ||
grayValues[(i - 1) * curBitmap.Width j] == 0 ||
grayValues[(i 1) * curBitmap.Width j] == 0 ||
grayValues[(i - 2) * curBitmap.Width j] == 0 ||
grayValues[(i 2) * curBitmap.Width j] == 0 ||
grayValues[i * curBitmap.Width j 1] == 0 ||
grayValues[i * curBitmap.Width j - 1] == 0 ||
grayValues[i * curBitmap.Width j 2] == 0 ||
grayValues[i * curBitmap.Width j - 2] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x18:
for (int i = 1; i < curBitmap.Height - 1; i )
{
for (int j = 1; j < curBitmap.Width - 1; j )
{
if (grayValues[i * curBitmap.Width j] == 0 ||
grayValues[(i - 1) * curBitmap.Width j] == 0 ||
grayValues[(i 1) * curBitmap.Width j] == 0 ||
grayValues[i * curBitmap.Width j 1] == 0 ||
grayValues[i * curBitmap.Width j - 1] == 0 ||
grayValues[(i - 1) * curBitmap.Width j - 1] == 0 ||
grayValues[(i 1) * curBitmap.Width j - 1] == 0 ||
grayValues[(i - 1) * curBitmap.Width j 1] == 0 ||
grayValues[(i 1) * curBitmap.Width j 1] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
case 0x28:
for (int i = 2; i < curBitmap.Height - 2; i )
{
for (int j = 2; j < curBitmap.Width - 2; j )
{
if (grayValues[(i - 2) * curBitmap.Width j - 2] == 0 ||
grayValues[(i - 2) * curBitmap.Width j - 1] == 0 ||
grayValues[(i - 2) * curBitmap.Width j] == 0 ||
grayValues[(i - 2) * curBitmap.Width j 1] == 0 ||
grayValues[(i - 2) * curBitmap.Width j 2] == 0 ||
grayValues[(i - 1) * curBitmap.Width j - 2] == 0 ||
grayValues[(i - 1) * curBitmap.Width j - 1] == 0 ||
grayValues[(i - 1) * curBitmap.Width j] == 0 ||
grayValues[(i - 1) * curBitmap.Width j 1] == 0 ||
grayValues[(i - 1) * curBitmap.Width j 2] == 0 ||
grayValues[i * curBitmap.Width j - 2] == 0 ||
grayValues[i * curBitmap.Width j - 1] == 0 ||
grayValues[i * curBitmap.Width j] == 0 ||
grayValues[i * curBitmap.Width j 1] == 0 ||
grayValues[i * curBitmap.Width j 2] == 0 ||
grayValues[(i 2) * curBitmap.Width j - 2] == 0 ||
grayValues[(i 2) * curBitmap.Width j - 1] == 0 ||
grayValues[(i 2) * curBitmap.Width j] == 0 ||
grayValues[(i 2) * curBitmap.Width j 1] == 0 ||
grayValues[(i 2) * curBitmap.Width j 2] == 0 ||
grayValues[(i 1) * curBitmap.Width j - 2] == 0 ||
grayValues[(i 1) * curBitmap.Width j - 1] == 0 ||
grayValues[(i 1) * curBitmap.Width j] == 0 ||
grayValues[(i 1) * curBitmap.Width j 1] == 0 ||
grayValues[(i 1) * curBitmap.Width j 2] == 0)
{
tempArray[i * curBitmap.Width j] = 0;
}
}
}
break;
default:
MessageBox.Show("错误的结构元素!");