⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 影像中角落的偵測-主要是機器視覺當中很重要的一環 因為角落的改變或是變化可以偵測出來當做影像變化的特徵
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
 T=30;
Bitmap1 = new Graphics::TBitmap();
Bitmap2 = new Graphics::TBitmap();
Bitmap3 = new Graphics::TBitmap();

origin->Picture->Bitmap->PixelFormat=(TPixelFormat)6;
Bitmap1->Assign(origin->Picture);

Panelimg->Width =Bitmap1->Width +16;
Panelimg->Height=Bitmap1->Height+16;

width =Bitmap1->Width ;
height=Bitmap1->Height;
Form1->Height=620;
initial_flag=0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::OPEN1Click(TObject *Sender)
{
if(OpenPictureDialog1->Execute())
 origin->Picture->LoadFromFile(OpenPictureDialog1->FileName);

origin->Picture->Bitmap->PixelFormat=(TPixelFormat)6;
Bitmap1->Assign(origin->Picture);

Panelimg->Width =Bitmap1->Width +16;
Panelimg->Height=Bitmap1->Height+16;

Form1->Width = Panelimg->Width +150;
//Form1->Hdight= Panelimg->Height+120;

width =Bitmap1->Width ;
height=Bitmap1->Height;

initial_flag=0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::EXIT1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Form2->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Laplacian1Click(TObject *Sender)
{
Byte *ptr;
int output;
Bitmap3->Assign(origin->Picture);
Bitmap3->PixelFormat =6;

 for(int i=0;i<Bitmap3->Height;i++)
 {
 ptr  = (Byte *)Bitmap3->ScanLine[i];
 for(int j=0;j<Bitmap3->Width;j++)
      P3[j][i]=ptr[j*3] ;
 }


for(int i=0;i<Bitmap3->Height;i++)
 {
 ptr = (Byte *)Bitmap3->ScanLine[i];
 for(int j=5;j<Bitmap3->Width;j++)
  {
//     if(P3[j][i]!=0)
      {
      if(Ix[j][i]<0)
        Ix[j][i]*=(-1);
      if(Iy[j][i]<0)
        Iy[j][i]*=(-1);

//       if((Ix[j][i]*Ix[j][i]+Iy[j][i]*Iy[j][i])!=0)
//        output=Ix[j][i];//+Iy[j][i];
//       else
//        output=1;
             output= Ixx[j][i]+Iyy[j][i];    //Det()
  /*      if(output==0)
                output=255;
       if(output>200 && output <300)
                output =255;
 */
 /*        if(output>255)
                output=255;
         if(output<255)
                output=1;
*/
/*      if(output >=ScrollBar3->Position)
        output =255;
      if(output < ScrollBar3->Position)
        output =0;
*/
      ptr[j*3]=output;//+Gy(j,i);
      ptr[j*3+1]=output;//+Gy(j,i);
      ptr[j*3+2]=output;//+Gy(j,i);
      }
  }
 }
origin->Picture->Assign(Bitmap3);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Hessian1Click(TObject *Sender)
{
Byte *ptr;
float output;
int max;
int f;
max=0;

initial_flag=1;
Bitmap3->Assign(origin->Picture);

 for(int i=0;i<Bitmap2->Height;i++)
 {
 ptr  = (Byte *)Bitmap2->ScanLine[i];
 for(int j=0;j<Bitmap2->Width;j++)
      P3[j][i]=ptr[j*3] ;
 }

for(int i=0;i<Bitmap3->Height;i++)
 {
 ptr = (Byte *)Bitmap3->ScanLine[i];
 for(int j=10;j<Bitmap3->Width;j++)
  {
        output=(Ixx[j][i]*Iyy[j][i]-Ixy[j][i]*Ixy[j][i]);

//       if(output>255)
//                output=255;
/*       if(output<255)
                output=1;
*/
/*
      if(output<0)
         output*=(-1);
      if(output>0 && output<5 && P3[j][i]>100)
            f=1;
       if(output>255)
                output=0;
       else
                output=255;
*/      if(output>max)
         max=output;
/*       if(output>ScrollBar1->Position)
                output=255;
       else
               output=0;
*/
      ptr[j*3]=output;//+Gy(j,i);
      ptr[j*3+1]=output;//+Gy(j,i);
      ptr[j*3+2]=output;//+Gy(j,i);
      if(f==1)
      {
      ptr[j*3]=0;//+Gy(j,i);
      ptr[j*3+1]=0;//+Gy(j,i);
      ptr[j*3+2]=255;//+Gy(j,i);
      f=0;
      }

  }
 }
origin->Picture->Assign(Bitmap3);
Edit1->Text=max;//ScrollBar1->Position;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::KR1Click(TObject *Sender)
{
Byte *ptr;
int outputa,outputb,outputc;
float max;
max=0  ;
Bitmap3->Assign(origin->Picture);

 for(int i=0;i<Bitmap3->Height;i++)
 {
 ptr  = (Byte *)Bitmap3->ScanLine[i];
 for(int j=0;j<Bitmap3->Width;j++)
      P3[j][i]=ptr[j*3] ;
 }

for(int i=0;i<Bitmap3->Height;i++)
 {
 ptr = (Byte *)Bitmap3->ScanLine[i];
 for(int j=10;j<Bitmap3->Width;j++)
  {
       if((Ix[j][i]*Ix[j][i]+Iy[j][i]*Iy[j][i])!=0)
        outputa=(Ixx[j][i]*Iy[j][i]*Iy[j][i]-2*Ixy[j][i]*Ix[j][i]*Iy[j][i]+Iyy[j][i]*Ix[j][i]*Ix[j][i])/(Ix[j][i]*Ix[j][i]+Iy[j][i]*Iy[j][i]);
       else
        outputa=0;

/*       if(outputa>255)
                outputa=255,outputb=255,outputc=255;
       else
               outputc=outputb=outputa;
       if(outputa<0)
                outputa=255,outputb=255,outputc=255;
*/
      if(outputa<0)
         outputa*=(-1);
      if(outputa>max)
         max=outputa;
       if(outputa>ScrollBar2->Position)
                outputa=255,outputb=255,outputc=255;
       else
               outputc=outputb=outputa=0;

      ptr[j*3]=outputa;//+Gy(j,i);
      ptr[j*3+1]=outputb;//+Gy(j,i);
      ptr[j*3+2]=outputc;//+Gy(j,i);

  }
 }
origin->Picture->Assign(Bitmap3);
Edit2->Text=ScrollBar2->Position;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Initialize1Click(TObject *Sender)
{
int i,j;
int flag;
initial_flag=1;

Byte *ptr,*ptr2;
Form1->Bitmap1->Assign(Form1->origin->Picture);

for(int i=0;i<Form1->height;i++)
 {
 ptr  = (Byte *)Form1->Bitmap1->ScanLine[i];
 for(int j=0;j<Form1->width;j++)
  {
      P[j][i]=ptr[j*3];
      Ix[j][i]=0;
      Iy[j][i]=0;
  }
 }

for(int j=0;j<Form1->height;j++)
 for(int i=0;i<Form1->width;i++)
   {
    Ix[i][j]= Gx(i,j,1);
    Iy[i][j]= Gy(i,j,1);
   }

for(int j=0;j<Form1->height;j++)
 for(int i=0;i<Form1->width;i++)
   {
    Ixx[i][j]= Gx(i,j,2);
    Iyy[i][j]= Gy(i,j,3);
    Ixy[i][j]= Gy(i,j,2);
   }

}
//---------------------------------------------------------------------------
int __fastcall TForm1::Gx(int i,int j,int x)
{
int gx;
int m,n;
int p[10];
int z[10];                          //   1 2 3
                                    //   4 5 6
                                    //   7 6 5
if(x==1)
{
p[1]=P[i-1][j-1];
p[2]=P[i  ][j-1];
p[3]=P[i+1][j-1];
p[4]=P[i-1][j  ];
p[5]=P[i  ][j  ];
p[6]=P[i+1][j  ];
p[7]=P[i-1][j+1];
p[8]=P[i  ][j+1];
p[9]=P[i+1][j+1];
}

if(x==2)
{
p[1]=Ix[i-1][j-1];
p[2]=Ix[i  ][j-1];
p[3]=Ix[i+1][j-1];
p[4]=Ix[i-1][j  ];
p[5]=Ix[i  ][j  ];
p[6]=Ix[i+1][j  ];
p[7]=Ix[i-1][j+1];
p[8]=Ix[i  ][j+1];
p[9]=Ix[i+1][j+1];
}

if(x==3)
{
p[1]=Iy[i-1][j-1];
p[2]=Iy[i  ][j-1];
p[3]=Iy[i+1][j-1];
p[4]=Iy[i-1][j  ];
p[5]=Iy[i  ][j  ];
p[6]=Iy[i+1][j  ];
p[7]=Iy[i-1][j+1];
p[8]=Iy[i  ][j+1];
p[9]=Iy[i+1][j+1];
}

z[1]=-1;
z[2]=-2;
z[3]=-1;
z[4]=0;
z[5]=0;
z[6]=0;
z[7]=1;
z[8]=2;
z[9]=1;

gx=0;

for(m=1;m<10;m++)
  gx+=p[m]*z[m];

 return(gx);

}
//---------------------------------------------------------------------------
int __fastcall TForm1::Gy(int i,int j,int y)
{
int gy;
int m,n;
int p[10];
int z[10];

if(y==1)
{
p[1]=P[i-1][j-1];
p[2]=P[i  ][j-1];
p[3]=P[i+1][j-1];
p[4]=P[i-1][j  ];
p[5]=P[i  ][j  ];
p[6]=P[i+1][j  ];
p[7]=P[i-1][j+1];
p[8]=P[i  ][j+1];
p[9]=P[i+1][j+1];
}

if(y==2)
{                                    //   7 6 5
p[1]=Ix[i-1][j-1];
p[2]=Ix[i  ][j-1];
p[3]=Ix[i+1][j-1];
p[4]=Ix[i-1][j  ];
p[5]=Ix[i  ][j  ];
p[6]=Ix[i+1][j  ];
p[7]=Ix[i-1][j+1];
p[8]=Ix[i  ][j+1];
p[9]=Ix[i+1][j+1];
}

if(y==3)
{                                    //   7 6 5
p[1]=Iy[i-1][j-1];
p[2]=Iy[i  ][j-1];
p[3]=Iy[i+1][j-1];
p[4]=Iy[i-1][j  ];
p[5]=Iy[i  ][j  ];
p[6]=Iy[i+1][j  ];
p[7]=Iy[i-1][j+1];
p[8]=Iy[i  ][j+1];
p[9]=Iy[i+1][j+1];
}

z[1]=-1;
z[2]=0;
z[3]=1;
z[4]=-2;
z[5]=0;
z[6]=2;
z[7]=-1;
z[8]=0;
z[9]=1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -