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");
}
}