边缘特征点提取.docx
《边缘特征点提取.docx》由会员分享,可在线阅读,更多相关《边缘特征点提取.docx(14页珍藏版)》请在冰豆网上搜索。
边缘特征点提取
边缘特征点提取
这个是主程序:
界面和代这
usingSystem;
usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;usingSystem.IO;
namespace这这这这这影量作1
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
privatestringcurFileName;
privateSystem.Drawing.BitmapcurBitmap;
inta=0;
intb=0;
intn=0;
intcount=0;
privatevoidbutton2_Click(objectsender,EventArgse)
{
OpenFileDialogof=newOpenFileDialog();
of.Filter="JPG这像(*.jpg)|*.jpg|BMP这像(*.bmp)|*.bmp|所有文件(*.*)|*.*";
of.Title="打文件这这这";
of.ShowDialog();
curFileName=of.FileName;
try
{
curBitmap=(Bitmap)Image.FromFile(curFileName);
}
catch(Exceptionex)
{
MessageBox.Show("出这!
"+ex.Message);
}
pictureBox1.Image=Image.FromFile(curFileName);
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
button4.Visible=true;
inti,j,k,m;
doubleV1=0,V2=0,V3=0,V4=0;
double[,]V=newdouble[curBitmap.Width,curBitmap.Height];
double[,]VV=newdouble[curBitmap.Width,curBitmap.Height];
int[,]Gray=newint[curBitmap.Width,curBitmap.Height];
for(i=0;ifor(j=0;j{
ColorpixelColor=this.curBitmap.GetPixel(i,j);
Gray[i,j]=(int)(pixelColor.R*0.299+pixelColor.G*0.587+pixelColor.B*
0.114);//灰度算公式这这这这
}
for(i=2;ifor(j=2;j{
for(k=-2;k<2;k++)
{
V1+=(Gray[i+k,j]-Gray[i+k+1,j])*(Gray[i+k,j]-Gray[i+k+1,j]);
V2+=(Gray[i+k,j+k]-Gray[i+k+1,j+k+1])*(Gray[i+k,j+k]-Gray[i
+k+1,j+k+1]);
V3+=(Gray[i,j+k]-Gray[i,j+k+1])*(Gray[i,j+k]-Gray[i,j+k+1]);
V4+=(Gray[i-k,j+k]-Gray[i-k-1,j+k+1])*(Gray[i-k,j+k]-Gray[i-
k-1,j+k+1]);
}
V[i,j]=MaxMin.MyMin(V1,V2,V3,V4);
V1=0;V2=0;V3=0;V4=0;
}
for(i=2;ifor(j=2;j{
try
{
if(V[i,j]>=Convert.ToDouble(textBox1.Text))
{
VV[i,j]=1;
}
else
{
VV[i,j]=0;
}
}
catch(Exceptionex)
{
MessageBox.Show("这这这这这入出:
"+ex.Message);
}
}
intWindowsScal=comboBox1.SelectedIndex;
if(WindowsScal==0)
WindowsScal=2;
elseif(WindowsScal==1)
WindowsScal=3;
elseif(WindowsScal==2)
WindowsScal=4;
else
MessageBox.Show("这这这特征点窗口模板大小");
m=WindowsScal*2+1;
doubletemp;
intwsi=WindowsScal;
intwsj=WindowsScal;
int[]Record=newint[curBitmap.Width*curBitmap.Height];
boolbol=true;
do
{
temp=0;
for(i=wsi;i{
for(j=wsj;j{
if(VV[i,j]==1)
{
if(temp{
temp=V[i,j];
a=i;
b=j;
}
}
else
{
a=0;b=0;
}
}
}
Record[n++]=a;
Record[n++]=b;
a=0;b=0;
if(curBitmap.Width-(wsi+m){
wsj+=m;
wsi=WindowsScal;
}
elseif(curBitmap.Height-(wsj+m){
bol=false;
}
else
{
wsi+=m;
}
}while(bol);
for(i=0;i{
if(Record[i]!
=0&&Record[i+1]!
=0)
{
count++;
DrawCircle.circle(Record[i],Record[i+1],pictureBox1);
richTextBox1.Text=richTextBox1.Text+'\n'+""+Record[i]+""+Record[i
+1]+""+Gray[Record[i],Record[i+1]]+""+V[Record[i],Record[i+1]];
}
}
label3.Text=count.ToString()+"个";
pictureBox1.Refresh();
MessageBox.Show("这理完成:
");
}
privatevoidbutton3_Click(objectsender,EventArgse)
{
SaveFileDialogsf=newSaveFileDialog();
sf.Filter="特征点数据|*.dat";
sf.FileName="特征点数据";
sf.ShowDialog();
FileStreamfs=newFileStream(sf.FileName,FileMode.Append);
StreamWritersw=newStreamWriter(fs,Encoding.Default);
sw.Write(richTextBox1.Text);
sw.Close();
fs.Close();
}
privatevoidbutton4_Click(objectsender,EventArgse)
{
stringstr;
if(pictureBox1.Image!
=null)
{
Bitmapbox1=newBitmap(pictureBox1.Image);
SaveFileDialogsv=newSaveFileDialog();
sv.Filter="jpg文件|*.jpg";
sv.ShowDialog();
str=sv.FileName;
box1.Save(str);
}
else
{
MessageBox.Show("没有片:
这这这");
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
下面是各这这这:
第一个是比大小这这这
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.IO;
namespace这这这这这影量作1
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
privatestringcurFileName;
privateSystem.Drawing.BitmapcurBitmap;
inta=0;
intb=0;
intn=0;
intcount=0;
privatevoidbutton2_Click(objectsender,EventArgse)
{
OpenFileDialogof=newOpenFileDialog();
of.Filter="JPG这像(*.jpg)|*.jpg|BMP这像(*.bmp)|*.bmp|所有文件(*.*)|*.*";
of.Title="打文件这这这";
of.ShowDialog();
curFileName=of.FileName;
try
{
curBitmap=(Bitmap)Image.FromFile(curFileName);
}
catch(Exceptionex)
{
MessageBox.Show("出这!
"+ex.Message);
}
pictureBox1.Image=Image.FromFile(curFileName);
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
button4.Visible=true;
inti,j,k,m;
doubleV1=0,V2=0,V3=0,V4=0;
double[,]V=newdouble[curBitmap.Width,curBitmap.Height];
double[,]VV=newdouble[curBitmap.Width,curBitmap.Height];
int[,]Gray=newint[curBitmap.Width,curBitmap.Height];
for(i=0;ifor(j=0;j{
ColorpixelColor=this.curBitmap.GetPixel(i,j);
Gray[i,j]=(int)(pixelColor.R*0.299+pixelColor.G*0.587+pixelColor.B*
0.114);//灰度算公式这这这这
}
for(i=2;ifor(j=2;j{
for(k=-2;k<2;k++)
{
V1+=(Gray[i+k,j]-Gray[i+k+1,j])*(Gray[i+k,j]-Gray[i+k+1,j]);
V2+=(Gray[i+k,j+k]-Gray[i+k+1,j+k+1])*(Gray[i+k,j+k]-Gray[i
+k+1,j+k+1]);
V3+=(Gray[i,j+k]-Gray[i,j+k+1])*(Gray[i,j+k]-Gray[i,j+k+1]);
V4+=(Gray[i-k,j+k]-Gray[i-k-1,j+k+1])*(Gray[i-k,j+k]-Gray[i-
k-1,j+k+1]);
}
V[i,j]=MaxMin.MyMin(V1,V2,V3,V4);
V1=0;V2=0;V3=0;V4=0;
}
for(i=2;ifor(j=2;j{
try
{
if(V[i,j]>=Convert.ToDouble(textBox1.Text))
{
VV[i,j]=1;
}
else
{
VV[i,j]=0;
}
}
catch(Exceptionex)
{
MessageBox.Show("这这这这这入出:
"+ex.Message);
}
}
intWindowsScal=comboBox1.SelectedIndex;
if(WindowsScal==0)
WindowsScal=2;
elseif(WindowsScal==1)
WindowsScal=3;
elseif(WindowsScal==2)
WindowsScal=4;
else
MessageBox.Show("这这这特征点窗口模板大小");
m=WindowsScal*2+1;
doubletemp;
intwsi=WindowsScal;
intwsj=WindowsScal;
int[]Record=newint[curBitmap.Width*curBitmap.Height];
boolbol=true;
do
{
temp=0;
for(i=wsi;i{
for(j=wsj;j{
if(VV[i,j]==1)
{
if(temp{
temp=V[i,j];
a=i;
b=j;
}
}
else
{
a=0;b=0;
}
}
}
Record[n++]=a;
Record[n++]=b;
a=0;b=0;
if(curBitmap.Width-(wsi+m){
wsj+=m;
wsi=WindowsScal;
}
elseif(curBitmap.Height-(wsj+m){
bol=false;
}
else
{
wsi+=m;
}
}while(bol);
for(i=0;i{
if(Record[i]!
=0&&Record[i+1]!
=0)
{
count++;
DrawCircle.circle(Record[i],Record[i+1],pictureBox1);
richTextBox1.Text=richTextBox1.Text+'\n'+""+Record[i]+""+Record[i
+1]+""+Gray[Record[i],Record[i+1]]+""+V[Record[i],Record[i+1]];
}
}
label3.Text=count.ToString()+"个";
pictureBox1.Refresh();
MessageBox.Show("这理完成:
");
}
privatevoidbutton3_Click(objectsender,EventArgse)
{
SaveFileDialogsf=newSaveFileDialog();
sf.Filter="特征点数据|*.dat";
sf.FileName="特征点数据";
sf.ShowDialog();
FileStreamfs=newFileStream(sf.FileName,FileMode.Append);
StreamWritersw=newStreamWriter(fs,Encoding.Default);
sw.Write(richTextBox1.Text);
sw.Close();
fs.Close();
}
privatevoidbutton4_Click(objectsender,EventArgse)
{
stringstr;
if(pictureBox1.Image!
=null)
{
Bitmapbox1=newBitmap(pictureBox1.Image);
SaveFileDialogsv=newSaveFileDialog();
sv.Filter="jpg文件|*.jpg";
sv.ShowDialog();
str=sv.FileName;
box1.Save(str);
}
else
{
MessageBox.Show("没有片:
这这这");
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////第二个:
这在像上面做这这这这这这这usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.IO;
namespace这这这这这影量作1
{
publicclassDrawCircle
{
publicstaticvoidcircle(intCursorX,intCursorY,PictureBoxpictureBox1)
{
Graphicsg;
g=Graphics.FromImage(pictureBox1.Image);
//g.DrawEllipse(newPen(Color.Green,1),CursorX-r,CursorY-r,2*r,2*r);
g.DrawLine(newPen(Color.Red,1),CursorX-8,CursorY,CursorX+8,CursorY);
g.DrawLine(newPen(Color.Red,1),CursorX,CursorY-8,CursorX,CursorY+8);
}
}