Mihai Sprinceana
Un forum de programare cu de toate. Va astept sa va inscrieti si sa deveniti moderatori. Oricine este binevenit aici sa se inscrie si sa aiba acces la informatie free! Fiecare este liber sa adauge proiecte programe free etc. Ajutati acest forum sa devina o comunitate puternica unde fiecare invata de la fiecare! Tot ce trebuie sa faceti este sa va inregistrati si fiecare contributie se poate dovedi utila in timp! Forumul este free informatia free dk aveti timp liber ajutati si pe ceilalti si invatati si voi in acelasi timp! Haideti sa facem ceva pt.a ne ajuta intre noi! Cititi regulament postare forum inainte de a posta!
Lista Forumurilor Pe Tematici
Mihai Sprinceana | Inregistrare | Login

POZE MIHAI SPRINCEANA

Nu sunteti logat.
Nou pe simpatie:
inna_90
Femeie
23 ani
Vrancea
cauta Barbat
30 - 48 ani
Mihai Sprinceana / Programe RNRF / Edge kirsch,robinson,sobel,prewitt,frei_chen,roberts model in C Moderat de Laur69, fireratbat, profu.info, sade5000
Autor
Mesaj Pagini: 1
mihaispr
Administrator

Inregistrat: acum 18 ani
Postari: 2142
//cea mai buna metoda pt.extragerea trasaturilor

#include <stdio.h>

#include <unistd.h>

#include <math.h>

#include "hvision.h"

int robert[2][2][2]={{{-1,0},{0,1}},{{0,-1},{1,0}}}; // mask
int prewitt[2][3][3]={{{-1,-1,-1},{0,0,0},{1,1,1}},{{-1,0,1},{-1,0,1},{-1,0,1}}}; // define mask
int sobel[2][3][3]={{{-1,-2,-1},{0,0,0},{1,2,1}},{{-1,0,1},{-2,0,2},{-1,0,1}}};  // define mask
double frej_chen[2][3][3]= {{{-1,-1.414213562,-1},{0,0,0},{1,1.41423562,1}},{{-1,0,1},{-1.414213562,0,1.414213562},{-1,0,1}}};

int kirsch[8][3][3]={{{-3,-3,5},{-3,0,5},{-3,-3,5}},{{-3,5,5},{-3,0,5},{-3,-3,-3}},{{5,5,5},{-3,0,-3},{-3,-3,-3}},

                       {{5,5,-3},{5,0,-3},{-3,-3,-3}},{{5,-3,-3},{5,0,-3},{5,-3,-3}},  // define mask

                       {{-3,-3,-3},{5,0,-3},{5,5,-3}},{{-3,-3,-3},{-3,0,-3},{5,5,5}},{{-3,-3,-3},{-3,0,5},{-3,5,5}}};

int robinson[8][3][3]={{{-1,0,1},{-2,0,2},{-1,0,1}},{{0,1,2},{-1,0,1},{-2,-1,0}}, // define mask

                        {{1,2,1},{0,0,0},{-1,-2,-1}},{{2,1,0},{1,0,-1},{0,-1,-2}},

                        {{1,0,-1},{2,0,-2},{1,0,-1}},{{0,-1,-2},{1,0,-1},{2,1,0}},

                        {{-1,-2,-1},{0,0,0},{1,2,1}},{{-2,-1,0},{-1,0,1},{0,1,2}}};
Int nevatia_babu[6][5][5]={{{100,100,100,100,100},{100,100,100,100,100},{0,0,0,0,0},
{-100,-100,-100,-100,-100},{-100,-100,-100,-100,-100}},           
{{100,100,100,100,100},{100,100,100,78,-32},{100,92,0,-92,-100},
{32,-78,-100,-100,-100},{-100,-100,-100,-100,-100}},     
{{100,100,100,32,-100},{100,100,92,-78,-100},{100,100,0,-100,-100},
{100,78,-92,-100,-100},{100,-32,-100,-100,-100}},     
{{-100,-100,0,100,100},{-100,-100,0,100,100},{-100,-100,0,100,100},
{-100,-100,0,100,100},{-100,-100,0,100,100}},     
{{-100,32,100,100,100},{-100,-78,92,100,100},{-100,-100,0,100,100},
{-100,-100,-92,78,100},{-100,-100,-100,-32,100}},   
{{100,100,100,100,100},{-32,78,100,100,100},{-100,-92,0,92,100},

{-100,-100,-100,-78,32},{-100,-100,-100,-100,-100}}};
// mask

      void edge_robert(IMAGE *input,IMAGE *output);

      void edge_prewitt(IMAGE *input,IMAGE *output);

      void edge_sobel(IMAGE *input,IMAGE *output);

      void edge_fc(IMAGE *input,IMAGE *output);

      void edge_kirsch(IMAGE *input,IMAGE *output);

      void edge_robinson(IMAGE *input,IMAGE *output);

      void edge_nb(IMAGE *input,IMAGE *output);

      int main()

      {

            IMAGE *img,*img_out;

            // Read Image

            if((img=hvReadImage("lena.im" ))==NULL)

                  _exit(0);

            img_out=hvMakeImage(512,512,1,SEQUENTIAL,ONEBYTE);

            // Do Edge Detection & output to a file

            edge_robert(img,img_out);

            hvWriteImage(img_out,"lena_robert.im" );

            edge_prewitt(img,img_out);

            hvWriteImage(img_out,"lena_prewitt.im" );

            edge_sobel(img,img_out);

            hvWriteImage(img_out,"lena_sobel.im" );

            edge_fc(img,img_out);

            hvWriteImage(img_out,"lena_frej_chen.im" );

            edge_kirsch(img,img_out);

            hvWriteImage(img_out,"lena_kirsch.im" );

            edge_robinson(img,img_out);

            hvWriteImage(img_out,"lena_robinson.im" );

            edge_nb(img,img_out);

            hvWriteImage(img_out,"lena_nevatia_babu.im" );

            return 0;

      }

      void edge_robert(IMAGE *input,IMAGE *output)

      {

            int i,j,x,y,k;

            int sum[2];

            double total;

            for(i=0;i<input->height;i++)

                  for(j=0;j<input->width;j++)

                  {

                        for(k=0;k<2;k++)

                              for(sum[k]=0,x=0;x<2;x++)

                                    for(y=0;y<2;y++)

                                          if(i+x<input->height&&y+j<input->width)

                                                sum[k]+=B_PIX(input,i+x,j+y)*robert[k][x][y];

                        for(total=0,k=0;k<2;k++)

                              total+=sqrt(sum[k]*sum[k]);

                        B_PIX(output,i,j) = (total<24)?255:0; //threshold

                  }

      }

      void edge_prewitt(IMAGE *input,IMAGE *output)

      {

            int i,j,x,y,k;

            int sum[2];

            double total;

            for(i=0;i<input->height;i++)

                  for(j=0;j<input->width;j++)

                  {

                        for(k=0;k<2;k++)

                              for(sum[k]=0,x=0;x<3;x++)

                                    for(y=0;y<3;y++)

                                          if(i+x<input->height&&y+j<input->width)

                                                sum[k]+=B_PIX(input,i+x,j+y)*prewitt[k][x][y];

                        for(total=0,k=0;k<2;k++)

                              total+=sqrt(sum[k]*sum[k]);

                        B_PIX(output,i,j) = (total<80)?255:0; // threshold

                  }

      }

      void edge_sobel(IMAGE *input,IMAGE *output)

      {

            int i,j,x,y,k;

            int sum[2];

            double total;

            for(i=0;i<input->height;i++)

                  for(j=0;j<input->width;j++)

                  {

                        for(k=0;k<2;k++)

                              for(sum[k]=0,x=0;x<3;x++)

                                    for(y=0;y<3;y++)

                                          if(i+x<input->height&&y+j<input->width)

                                                sum[k]+=B_PIX(input,i+x,j+y)*sobel[k][x][y];

                        for(total=0,k=0;k<2;k++)

                              total+=sqrt(sum[k]*sum[k]);

                        B_PIX(output,i,j) = (total<95)?255:0; // threshold

                  }

      }

      void edge_fc(IMAGE *input,IMAGE *output)

      {

            int i,j,x,y,k;

            double sum[2];

            double total;

            for(i=0;i<input->height;i++)

                  for(j=0;j<input->width;j++)

                  {

                        for(k=0;k<2;k++)

                              for(sum[k]=0,x=0;x<3;x++)

                                    for(y=0;y<3;y++)

                                          if(i+x<input->height&&y+j<input->width)

                                                sum[k]+=B_PIX(input,i+x,j+y)*frej_chen[k][x][y];

                        for(total=0,k=0;k<2;k++)

                              total+=sqrt(sum[k]*sum[k]);

                        B_PIX(output,i,j) = (total<85)?255:0; //threshold

                  }

      }

      void edge_kirsch(IMAGE *input,IMAGE *output)

      {

            int i,j,x,y,k;

            int sum[8],max;

            for(i=0;i<input->height;i++)

                  for(j=0;j<input->width;j++)

                  {

                        for(k=0;k<8;k++)

                              for(sum[k]=0,x=0;x<3;x++)

                                    for(y=0;y<3;y++)

                                          if(i+x<input->height&&y+j<input->width)

                                                sum[k]+=B_PIX(input,i+x,j+y)*kirsch[k][x][y];

                        for(max=0,k=0;k<8;k++)

                              max= (max<sum[k])?sum[k]:max;

                        B_PIX(output,i,j) = (max<240)?255:0; //threshold

                  }

      }

      void edge_robinson(IMAGE *input,IMAGE *output)

      {

            int i,j,x,y,k;

            int sum[8];

            double max;

            for(i=0;i<input->height;i++)

                  for(j=0;j<input->width;j++)

                  {

                        for(k=0;k<8;k++)

                              for(sum[k]=0,x=0;x<3;x++)

                                    for(y=0;y<3;y++)

                                          if(i+x<input->height&&y+j<input->width)

                                                sum[k]+=B_PIX(input,i+x,j+y)*robinson[k][x][y];

                        for(max=0,k=0;k<8;k++)

                              max= (max<sum[k])?sum[k]:max;

                        B_PIX(output,i,j) = (max<80)?255:0; //threshold

                  }

      }

      void edge_nb(IMAGE *input,IMAGE *output)

      {

            int i,j,x,y,k;

            int sum[6],max;

            for(i=0;i<input->height;i++)

                  for(j=0;j<input->width;j++)

                  {

                        for(k=0;k<6;k++)

                              for(sum[k]=0,x=0;x<5;x++)

                                    for(y=0;y<5;y++)

                                          if(i+x<input->height&&y+j<input->width)

                                                sum[k]+=B_PIX(input,i+x,j+y)*nevatia_babu[k][x][y];

                        for(max=0,k=0;k<6;k++)

                              max= (max<sum[k])?sum[k]:max;

                        B_PIX(output,i,j) = (max<22000)?255:0; //threshold

                  }

      }

// unde functia edge_fc este detectia muchiilor folosind metoda frei-chen, se pastreaza doar functia void edge_kirsch
// pentru detectia muchiilor unei imagini folosind metoda edge_kirsch


pus acum 15 ani
   
Pagini: 1  

Mergi la