Team Slytherin: Difference between revisions

From Cpre584
Jump to navigation Jump to search
Bhavani (talk | contribs)
Bhavani (talk | contribs)
Line 91: Line 91:


Source: Edge Detection Tutorial-Author: Bill Green (2002)[http://dasl.mem.drexel.edu/alumni/bGreen/www.pages.drexel.edu/_weg22/edge.html]
Source: Edge Detection Tutorial-Author: Bill Green (2002)[http://dasl.mem.drexel.edu/alumni/bGreen/www.pages.drexel.edu/_weg22/edge.html]
/*---------------------------------------------------
SOBEL ALGORITHM STARTS HERE
  ---------------------------------------------------*/
  for(Y=0; Y<=(originalImage.rows-1); Y++)  {
for(X=0; X<=(originalImage.cols-1); X++)  {
    sumX = 0;
    sumY = 0;
            /* image boundaries */
    if(Y==0 || Y==originalImage.rows-1)
  SUM = 0;
    else if(X==0 || X==originalImage.cols-1)
  SUM = 0;
    /* Convolution starts here */
    else  {
      /*-------X GRADIENT APPROXIMATION------*/
      for(I=-1; I<=1; I++)  {
  for(J=-1; J<=1; J++)  {
      sumX = sumX + (int)( (*(originalImage.data + X + I +
                            (Y + J)*originalImage.cols)) * GX[I+1][J+1]);
  }
      }
      /*-------Y GRADIENT APPROXIMATION-------*/
      for(I=-1; I<=1; I++)  {
  for(J=-1; J<=1; J++)  {
      sumY = sumY + (int)( (*(originalImage.data + X + I +
                              (Y + J)*originalImage.cols)) * GY[I+1][J+1]);
  }
      }
      /*---GRADIENT MAGNITUDE APPROXIMATION (Myler p.218)----*/
              SUM = abs(sumX) + abs(sumY);
            }
            if(SUM>255) SUM=255;
            if(SUM<0) SUM=0;
    *(edgeImage.data + X + Y*originalImage.cols) = 255 - (unsigned char)(SUM);
    fwrite((edgeImage.data + X + Y*originalImage.cols),sizeof(char),1,bmpOutput);
}
  }
  printf("See edgeSob.bmp for results\n");
  fclose(bmpInput);
  fclose(bmpOutput);
  farfree(edgeImage.data);      /* Finished with edgeImage.data */
  farfree(originalImage.data);  /* Finished with originalImage.data */
  return 0;
}

Revision as of 05:18, 22 February 2012

Team Members

  • Kevin Townsend
  • Bhavani Satyanarayana Rao
  • Chidvila Gaddam

Assignment1


Running the sample application with script files

  • The runcp script located in the SampleAppVadd can be used to run the application in HW which sets the appropriate environment variables and runs the UserApp.exe
  • export CNY_PDK_PROJ = ~/pdk_sample/cae_pers_vadd ./runcp
  • The run script located in the SampleAppVadd can be used to run the application in SW
  • The scripts above can be used to run the application on Simulator using the "-vsim" option which sets the environment variable CNY_CAE_EMULATOR to ./run_simulation
  • ./runcp -vsim or ./run -vsim


Environment VariablesSoftwareModelSimHardware
CNY_SIM_THREADlibcpSimLib2.solibcpSimLib2.sounset
CNY_CAE_EMULATOR<location for CaeSimPers>./run_simulationunset


Changes made to run the application on ModelSim

  • Setup as explained in here [[1]]
  • Set the CNY_PDK_PROJ environment variable to the location of cae_pers_vadd
  • export CNY_PDK_PROJ = ~/pdk_sample/cae_pers_vadd
  • Copied Jones' my_makefile from the temp dir and replaced the makefile in CY_PDK_PROJ/testbench
  • Add line to the makefile in testbench dir
  • CNY_PDK_MODELSIM_USER_SIM_OPTIONS= -i -do "run -all"
  • Modify the values of LIB_DIR and LDFLAGS from 32-bit to 64-bit as given below
  • LIB_DIR = lib64 LDFLAGS = -m64

Error creating thumbnail: File missing

Extra Credit: Exploring gdb

  • We invoked gdb using the gdb <programname> command or by using the run/runcp script files in with "-gdb" option
  • gdb UserApp.exe or ./run -gdb Error creating thumbnail: File missing
  • One can find different command classes on gdb by typing help.To get details on a particular command class/command, type help on gdb followed by the name of the command class/command
  • Error creating thumbnail: File missing
  • We explored some commands like run, start (to begin execution), stepi (for single instruction stepping into a file), kill (kill a running program) and quit on gdb
  • Error creating thumbnail: File missing

Assignment2


About Sobel Algorithm

Sobel Algorithm is used for edge detection in image processing.The link[2] explains

  • Why edge detection is important?
  • How sobel algorithm uses the gradient method (jump in the pixel values along edges in the images compared to the pixels around it) to detect edges in images?

The Algorithm

  • Use Sobel masks to find the gradient of a pixel w.r.t its 8 immediate neighboring pixel values. The Sobel masks are GX={(-1,0,+1),(-2,0,+2),(-1,0,+1)) which gives the gradient in the x direction and Gy={(+1,+2,+1),(0,0,0),(-1,-2,-1)} which gives the gradient in the x direction.
  • Find the approximate magnitude of the gradient using the formula
  • |G|=|Gx|+|Gy|
  • Compare |G| against the threshold values (0 and 255 in our case).
  • If (|G| > 255) then the pixel value is 0 in the output image. If (|G| < 0) then the pixel value is 255 in the output image.
  • Repeat the above steps for all the pixels in the image

C code for Sobel Algorithm

Source: Edge Detection Tutorial-Author: Bill Green (2002)[3]

/*---------------------------------------------------

SOBEL ALGORITHM STARTS HERE

  ---------------------------------------------------*/
  for(Y=0; Y<=(originalImage.rows-1); Y++)  {

for(X=0; X<=(originalImage.cols-1); X++) { sumX = 0; sumY = 0;

            /* image boundaries */

if(Y==0 || Y==originalImage.rows-1) SUM = 0; else if(X==0 || X==originalImage.cols-1) SUM = 0;

/* Convolution starts here */ else {

/*-------X GRADIENT APPROXIMATION------*/ for(I=-1; I<=1; I++) { for(J=-1; J<=1; J++) { sumX = sumX + (int)( (*(originalImage.data + X + I +

                            (Y + J)*originalImage.cols)) * GX[I+1][J+1]);

} }

/*-------Y GRADIENT APPROXIMATION-------*/ for(I=-1; I<=1; I++) { for(J=-1; J<=1; J++) { sumY = sumY + (int)( (*(originalImage.data + X + I +

                             (Y + J)*originalImage.cols)) * GY[I+1][J+1]);

} }

/*---GRADIENT MAGNITUDE APPROXIMATION (Myler p.218)----*/

              SUM = abs(sumX) + abs(sumY);
            }
            if(SUM>255) SUM=255;
            if(SUM<0) SUM=0;

*(edgeImage.data + X + Y*originalImage.cols) = 255 - (unsigned char)(SUM); fwrite((edgeImage.data + X + Y*originalImage.cols),sizeof(char),1,bmpOutput); }

  }
  printf("See edgeSob.bmp for results\n");
  fclose(bmpInput);
  fclose(bmpOutput);
  farfree(edgeImage.data);      /* Finished with edgeImage.data */
  farfree(originalImage.data);  /* Finished with originalImage.data */
  return 0;

}