BO

#include<stdio.h>

#include<dos.h>

#include "conio.h"

#include<graphics.h>

#include<IO.h>

#include<math.h>

#include<conio.h>

FILE *fp,*fp1,*rfp,*tr,*er,*er1;

int r_img[40][40],avg[40][40],low,high;

int image[35][35],x,y,u,v,m_choice;

int img[35][35],real[35][35],m_log[35][35],dif=50,m_nega[35][35],img2[35][35];

int img1[35][35],real1[35][35],m_log1[35][35];

int dec,i,r,index=8,c1=0,bitSize[985];

int binary[985][10];

int and[35][35],bitplane[70][70];

double t;

void threshold();

void dilation();

void rGrow();

void averaging();

int recr(int x,int y);

void fileOpen();

void r_display();

void Spectrum();

void display();

void inveSpectrum();

void show(int *,int);

void bitPlane();

void negative();

void m_and();

void m_or();

void main()

{

    int gdriver=DETECT,gmode=VGAHI,errorcode;

    initgraph(&gdriver,&gmode,"c:\\tc\\bgi");

    setcolor(9);

    rectangle(44,44,441,91);

    rectangle(45,45,440,90);

    settextstyle(5, HORIZ_DIR, 3);

    setcolor(GREEN);

    outtextxy(50,50,"Digital Image Processing  Lab Work");

    setcolor(GREEN);

    settextstyle(2, HORIZ_DIR, 5);

    setcolor(RED);

    rectangle(125,120,350,350);

    outtextxy(150,120," 1:      Spectrum");

    outtextxy(150,140," 2:      Negative");

    outtextxy(150,160," 3:      BitPlane");

    outtextxy(150,180," 4:      OR     ");

    outtextxy(150,200," 5:      AND     ");

    outtextxy(150,220," 6:      Region Grow");

    outtextxy(150,240," 7:      Averaging");

    outtextxy(150,260," 8:      Threshold");

    outtextxy(150,280," 9:      Dilation");

    outtextxy(150,300," 10:     Exit");

    outtextxy(150,320," Input Choice");

    gotoxy(150,240);

    scanf("%d",&    m_choice);

    switch(m_choice)

    {

    case 9:

    {

     /////dilation

     cleardevice();

     fileOpen();

     dilation();

    break;

    }

    case  8:

    {

    cleardevice();

    fileOpen();

    threshold();

    break;

    }

    case 7:

     {

       cleardevice();

       fileOpen();

       averaging();

       break;

     }

    case 6:

    {

    cleardevice();

    fileOpen();

    rGrow();

    break;

    }

     case 10:

     {

      break;

     }

     case 1:

       {

        cleardevice();

        fileOpen();

        Spectrum();

        //inveSpectrum();

        display();

        //r_display();

        break;

       }

     case 2:

       {

        cleardevice();

        fileOpen();

        negative();

        break;

       }

       case 3:

       {

         cleardevice();

         fileOpen();

         bitPlane();

         break;

       }

     case 4:

     {

        cleardevice();

        fileOpen();

        m_or();

        break;

     }

     case 5:

     {

        cleardevice();

        fileOpen();

        m_and();

        break;

     }

    }// SWITCH CLOSE

    fclose(fp);

    getch();

       }//MAIN CLOSE

       void dilation()

       {

     int mask[3][3]={

         { 0,1,0},

         { 1,1,1},

         { 0,1,0}

        };

     int mask1[3][3]={

             {1,1,1},

             {1,1,1},

             {1,1,1}

            };

     int dimg[40][40],dimg1[40][40],dimg2[40][40],x,y,j;

     int ddimg[40][40],ddimg1[40][40],ddimg2[40][40],ddresult[40][40];

     int dresult[40][40],temp,max,a,b,min,mtemp;

     setcolor(GREEN);

     outtextxy(10,30 ,"Mask Type");

     printf("\n\n\n");

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

     {

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

       {

        printf( " %d ",mask[i][j]);

       }

      printf("\n");

     }

     printf("\n\n");

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

      {

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

       {

        printf( " %d ",mask1[i][j]);

       }

      printf("\n");

     }

     printf("\t\t\t");

     outtextxy(180,100,"First Mask");

     setcolor(GREEN);

 outtextxy(100,130,"InputImage");

 for(x=0;x<32;x++)

 {

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

  {

   dimg[x][y]=(int)fgetc(er);

//   putpixel(x+100,y+100,img[x][y]);

  }

 }

 // dispaly

for(x=0;x<28;x++)

{

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

  {

   putpixel(x+100,y+150,dimg[x][y]);

  }

}

 // dilation

 for(x=1;x<32;x++)

  {

   for(y=1;y<32;y++)

    {

     max=0;

     for(a=-1;a<=1;a++)

     {

      for(b=-1;b<=1;b++)

       {

    if(mask[a+1][b+1]==1)

    {

     if(dimg[x+a][y+b]>max)

      max=dimg[x+a][y+b];

    }

       }

     }

      dimg1[x][y]=max;

    }

  }

  setcolor(RED);

  outtextxy(200,130,"Dilation");

  for(x=1;x<30;x++)

  {

   for(y=1;y<30;y++)

    {

     putpixel(x+200,y+150,dimg1[x][y]);

     delay(3);

    }

  }

   // erotion

 for(x=1;x<32;x++)

  {

   for(y=1;y<32;y++)

    {

     min=1;

     for(a=-1;a<=1;a++)

     {

      for(b=-1;b<=1;b++)

       {

    if(mask[a+1][b+1]==1)

    {

     if(dimg[x+a][y+b]<min)

      min=dimg[x+a][y+b];

    }

       }

     }

      dimg2[x][y]=min;

    }

  }

 setcolor(GREEN);

 outtextxy(300,130,"Erotion");

for(x=1;x<=28;x++)

{

 for(y=1;y<=28;y++)

 {

  putpixel(x+300,y+150,dimg2[x][y]);

  delay(3);

  }

}

for(x=1;x<=32;x++)

{

 for(y=1;y<=32;y++)

  {

   dresult[x][y]=dimg1[x][y]-dimg2[x][y];

   delay(3);

  }

}

 setcolor(GREEN);

 outtextxy(400,130,"Detection");

for(x=1;x<=28;x++)

{

 for(y=1;y<=28;y++)

  {

  if(dresult[x][y]==254)

   dresult[x][y]=0;

   putpixel(x+400,y+150,dresult[x][y]);

//   printf("%d ",dresult[x][y]);

  }

 }

fclose(er);

////////// second mask

 for(x=0;x<32;x++)

 {

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

  {

   ddimg[x][y]=(int)fgetc(er1);

//   putpixel(x+100,y+100,img[x][y]);

  }

 }

 // dispaly

for(x=0;x<28;x++)

{

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

  {

   putpixel(x+100,y+250,ddimg[x][y]);

     }

}

 // dilation

 for(x=1;x<32;x++)

  {

   for(y=1;y<32;y++)

    {

     max=0;

     for(a=-1;a<=1;a++)

     {

      for(b=-1;b<=1;b++)

       {

    if(mask1[a+1][b+1]==1)

    {

     if(ddimg[x+a][y+b]>max)

      max=ddimg[x+a][y+b];

    }

       }

     }

      ddimg1[x][y]=max;

    }

  }

  for(x=1;x<30;x++)

  {

   for(y=1;y<30;y++)

    {

     putpixel(x+200,y+250,ddimg1[x][y]);

     delay(3);

    }

  }

   // erotion

 for(x=1;x<32;x++)

  {

   for(y=1;y<32;y++)

    {

     min=1;

     for(a=-1;a<=1;a++)

     {

      for(b=-1;b<=1;b++)

       {

    if(mask1[a+1][b+1]==1)

    {

     if(ddimg[x+a][y+b]<min)

      min=ddimg[x+a][y+b];

    }

       }

     }

      ddimg2[x][y]=min;

    }

  }

for(x=1;x<=28;x++)

{

 for(y=1;y<=28;y++)

 {

  putpixel(x+300,y+250,ddimg2[x][y]);

  delay(3);

  }

}

for(x=1;x<=32;x++)

{

 for(y=1;y<=32;y++)

  {

   ddresult[x][y]=ddimg1[x][y]-ddimg2[x][y];

   delay(3);

  }

}

for(x=1;x<=28;x++)

{

 for(y=1;y<=28;y++)

  {

  if(ddresult[x][y]==254)

   ddresult[x][y]=0;

   putpixel(x+400,y+250,ddresult[x][y]);

//   printf("%d ",dresult[x][y]);

  }

}

fclose(fp);

}

       void threshold()

       {

    int low,high,i,j,avg1[40][40],thresh[40][40];

    printf("Input Low Threshold value");

    scanf("%d",&low);

    printf("Input High Threshold value");

    scanf("%d",&high);

    outtextxy(100,80,"ORIGINAL");

    for(i=0;i<32;i++)

    {

     for(j=0;j<32;j++)

     {

      thresh[j][i]=(int)fgetc(tr);

      putpixel(i+100,j+100,thresh[j][i]);

     }

    }

for(i=0;i<32;i++)

  {

   for(j=0;j<32;j++)

       {

    if(thresh[i][j]>low && thresh[i][j]<=high)

    {

     avg1[i][j] =255;

    }

       else

     avg1[i][j]=0;

     }

  }

    outtextxy(300,80,"OUTPUT");

  for(i=0;i<32;i++)

    {

      for(j=0;j<32;j++)

      {

       putpixel(j+300,40-i+100,avg1[i][j]);

      }

   }

  }

       void averaging()

       {

    int i,j;

    outtextxy(100,80,"ORIGINAL");

    for(i=0;i<32;i++)

    {

     for(j=0;j<32;j++)

     {

      r_img[j][i]=(int)fgetc(tr);

      putpixel(i+100,j+100,r_img[j][i]);

     }

    }

       //////////process//////////

       for(i=1;i<30;i++)

    {

     for(j=1;j<30;j++)

      {

         avg[i][j] = (r_img[i-1][j-1]+r_img[i-1][j]+r_img[i-1][j+1]+

             +r_img[i][j-1]+r_img[i][j]+r_img[i][j+1]+

            r_img[i+1][j-1]+r_img[i+1][j]+r_img[i+1][j+1])/9;

       }

  }

  outtextxy(300,80,"OUTPUT");

  for(i=0;i<32;i++)

    {

      for(j=0;j<32;j++)

      {

       putpixel(j+300,40-i+100,avg[i][j]);

      }

  }

 }

       void rGrow()

       {

     int i,j;

     outtextxy(100,80,"ORGINAL");

     for(i=0;i<32;i++)

     {

      for(j=0;j<32;j++)

       {

       r_img[j][i]=(int)fgetc(rfp);

       putpixel(i+100,j+100,r_img[j][i]);

       }

      }

    for(i=0;i<32;i++)

     {

      for(j=0;j<32;j++)

        {

         if(r_img[j][i]==255)

         break;

        }

      break;

     }

      recr(j,i);

      getch();

    }

       // connectivity

       int recr(int x,int y)

       {

       outtextxy(200,80,"OUTPUT");

    if(r_img[x][y]==255)

     {

      putpixel(x+200,y+100,255);

      delay(20);

      r_img[x][y]= -21;

      recr(x,y+1);

      recr(x,y-1);

      recr(x+1,y);

      recr(x-1,y);

     }

    else

     {

      return(0);

     }

    return(0);

      }

       void m_or()

       {

    for(x=1;x<33;x++)

    for(y=1;y<33;y++)

          {

          image[x][y]=(int)fgetc(fp);

          setcolor(RED);

          outtextxy(150,100,"Image1");

          putpixel(y+150,x+150,image[x][y]);

          img2[x][y]=(int)fgetc(fp1);

          setcolor(RED);

          outtextxy(220,100,"Image2");

          putpixel(y+220,x+150,img2[x][y]);

          setcolor(RED);

          outtextxy(290,100,"OR O/P");

          putpixel(y+290,x+150,image[x][y]|img2[x][y]);

          }

       }

     void m_and()

       {

    for(x=1;x<33;x++)

    for(y=1;y<33;y++)

          {

          image[x][y]=(int)fgetc(fp);

          setcolor(RED);

          outtextxy(150,100,"Image1");

          putpixel(y+150,x+150,image[x][y]);

          img2[x][y]=(int)fgetc(fp1);

          setcolor(GREEN);

          outtextxy(220,100,"Image2");

          putpixel(y+220,x+150,img2[x][y]);

          setcolor(BLUE);

          outtextxy(290,100,"AND O/P");

          putpixel(y+290,x+150,image[x][y]&img2[x][y]);

          }

       }

       void negative()

       {

    int m_neg;

    for(x=1;x<33;x++)

    for(y=1;y<33;y++)

          {

          image[x][y]=(int)fgetc(fp);

          outtextxy(150,100,"Input Image");

          putpixel(y+150,x+150,image[x][y]);

          m_nega[x][y]=(int)fgetc(fp);

          outtextxy(260,100,"Negative");

          putpixel(y+250,x+150,m_nega[x][y]-255);

          }

        }

    void bitPlane()

    {

    for(x=1;x<33;x++)

    for(y=1;y<33;y++)

      {

       bitplane[x][y]=(int)fgetc(fp);

       putpixel(x,y,bitplane[x][y]);

      }

    for(x=1;x<1024;x++)

    for(y=1;y<8;y++)

     binary[x][y]=0;

    for(x=1;x<33;x++)

      {

       for(y=1;y<33;y++)

        {

         dec=bitplane[x][y];

         index=8;

         while(dec!=0)

          {

           binary[c1][index]=dec%2;

           r=dec/2;

           dec=r;

           index--;

          }

         c1++;

        }

      }

       for(x=1;x<=6;x++)

    {

      for(y=1;y<1024;y++)

      {

       bitSize[index]=binary[index][x];

       index++;

      }

       dif+=45;

       show(bitSize,dif);

    }

      }

    void fileOpen()

    {

    fp=fopen("c:\\dd4.bmp","r");

    fp1=fopen("c:\\dd5.bmp","r");

    rfp=fopen("c:\\pop1.bmp","r");

    tr=fopen("c:\\tresh.bmp","r");

    er=fopen("c:\\ero.bmp","r");

    er1=fopen("c:\\ero1.bmp","r");

    fseek(er,1078,0L);

    fseek(fp,1078,0L);

    fseek(fp1,1078,0L);

    fseek(rfp,1078,0L);

    fseek(tr,1078,0L);

    fseek(er1,1078,0L);

    }

       void show(int *p,int c)

    {

     int x,y,count=0;

     for(x=1;x<33;x++)

     {

      for(y=1;y<33;y++)

       {

        putpixel(x+c,y,*(p+count));

        count++;

       }

     }

       }

    void inveSpectrum()

    {

       /*    for(x=1;x<33;x++)

    for(y=1;y<33;y++)

          {

          image[x][y]=(int)fgetc(fp);

          putpixel(y+140,x+150,image[x][y]);

          }

    outtextxy(150,100,"Input Image");*/

    for(u=0;u<33;u++)

    {

     for(v=0;v<33;v++)

     {

          img1[u][v]=0;

          real1[u][v]=0;

       for(x=0;x<33;x++)

       {

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

        {

         img1[u][v]=img1[u][v]+m_log[x][y]*cos((double)((6.28*(u*x+v*y))/32));

         real1[u][v]=real1[u][v]+m_log[x][y]*sin((double)((6.28*(u*x+v*y))/32));

        }

       }

      img1[u][v]=abs(img1[u][v]/33);

      real1[u][v]=abs(real1[u][v]/33);

     }

    }

    for(u=0;u<33;u++)

     {

     for(v=0;v<33;v++)

       {

        t=abs((double)(img1[u][v]*img1[u][v]+real1[u][v]*real1[u][v]));

        m_log1[u][v]=(int)(log(1.0+sqrt(t)));

       }

     }

    }

    /////////////////////////////////////////

       //     spectrum                      //

       //////////////////////////////////////////

    void Spectrum()

    {

    for(x=1;x<33;x++)

    for(y=1;y<33;y++)

          {

          image[x][y]=(int)fgetc(fp);

          putpixel(y+140,x+150,image[x][y]);

          }

    outtextxy(150,100,"Input Image");

    for(u=0;u<33;u++)

    {

     for(v=0;v<33;v++)

     {

          img[u][v]=0;

          real[u][v]=0;

       for(x=0;x<33;x++)

       {

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

        {

         img[u][v]=img[u][v]+image[x][y]*cos((double)((6.28*(u*x+v*y))/32));

         real[u][v]=real[u][v]+image[x][y]*sin((double)((6.28*(u*x+v*y))/32));

        }

       }

      img[u][v]=abs(img[u][v]/32);

      real[u][v]=abs(real[u][v]/32);

     }

    }

    for(u=0;u<33;u++)

     {

     for(v=0;v<33;v++)

       {

        t=abs((double)(img[u][v]*img[u][v]+real[u][v]*real[u][v]));

        m_log[u][v]=(int)(log(1.0+sqrt(t)));

       }

     }

       }

       void display()

       {

    for(x=0;x<33;x++)

     {

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

         {

          putpixel(x+280,y+150,m_log[x][y]);

         }

     outtextxy(280,100,"Spectrum");

        }

    }

      void r_display()

       {

    for(x=0;x<33;x++)

     {

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

         {

          putpixel(y+380,x+150,m_log[x][y]);

         }

     outtextxy(380,100,"Orginal");

        }

    }