Sei sulla pagina 1di 31

80

Source code
INTERMEAN METHOD
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<process.h>
#include<math.h>
#include<stdlib.h>
// header information of bmp image//
struct bmp {
char signature;
char signature1;
unsigned long size;
unsigned int offset_1;
unsigned int offset_2;
unsigned long start_1;
unsigned long start_2;
unsigned int width;
unsigned int none;
unsigned int height;
unsigned int none1;
unsigned int plane;
unsigned int pixel;
}r,*r1=&r;
//MAIN PROGRAM
void main ()
{
FILE *f; int i,gm,gd=DETECT; char file[50];
long j,k; unsigned
h[256]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

81

float m,n,at,An,bt,Bn,ut,vt;int T[256],threshold; int


t,u;unsigned A[256],B[256];
initgraph(&gd,&gm,"c:\\tc\\bgi ");
/*------OPENING OF BMP IMAGE------*/
printf("Enter the name of file with path and extension as
BMP : ");
gets(file);
f=fopen(file,"rb+");
if(f==NULL)
{ printf("can't open the file");
getch();
exit(0);}
else printf("open file");
/*------INFORMATION EXTRACT FROM BMP IMAGE------*/
fread(r1,sizeof(*r1),1,f);
printf("%c",r1->signature);
printf("%c\n",r1->signature1);
printf("size of image : %u\n",r1->size);
printf(" offset1: %u\n",r1->offset_1);
printf("offset_2: %u\n",r1->offset_2);
printf("offset start of image : %u\n",r1->start_1);
printf("offset of bmp header structure: %u\n",r1>start_2);
printf("width is : %u\n",r1->width);
printf("height is : %u\n",r1->height);
printf("no of plane in image : %u\n" ,r1->plane);
printf("bytes per pixel : %u\n",r1->pixel);
getch();
fseek(f,r1->start_1,0);
clearviewport();
/*------BMP IMAGE GENERATION ON RASTER AND DISPLAY ON
SCREEN------*/
for(k=r1->height-1;k>=0;k--)
{
for(j=0;j<r1->width;j++)
{
i=fgetc(f);
switch(i){
case
case
case
case
case
case
case
case

0
1
2
3
4
5
6
7

:
:
:
:
:
:
:
:

h
h
h
h
h
h
h
h

[0]=h[0]+1;
[1]=h[1]+1;
[2]=h[2]+1;
[3]=h[3]+1;
[4]=h[4]+1;
[5]=h[5]+1;
[6]=h[6]+1;
[7]=h[7]+1;

break;
break;
break;
break;
break;
break;
break;
break;

82

case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h

case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

:
:
:
:
:
:
h
:
:
h
:
:
h
:
h
:
:
:
h
:
h
h
:

h [31]=h[31]+1; break;
h [32]=h[32]+1; break;
h [33]=h[33]+1; break;
h [34]=h[34]+1; break;
h [35]=h[35]+1; break;
h [36]=h[36]+1; break;
[37]=h[37]+1; break;
h [38]=h[38]+1; break;
h [39]=h[39]+1; break;
[40]=h[40]+1; break;
h [41]=h[41]+1; break;
h [42]=h[42]+1; break;
[43]=h[43]+1; break;
h [44]=h[44]+1; break;
[45]=h[45]+1; break;
h [46]=h[46]+1; break;
h [47]=h[47]+1; break;
h [48]=h[48]+1; break;
[49]=h[49]+1; break;
h [50]=h[50]+1; break;
[51]=h[51]+1; break;
[52]=h[52]+1; break;
h [53]=h[53]+1; break;

:
:
:
:

:
:
:

[8]=h[8]+1; break;
[9]=h[9]+1; break;
[10]=h[10]+1; break;
[11]=h[11]+1; break;
[12]=h[12]+1; break;
[13]=h[13]+1; break;
[14]=h[14]+1; break;
[15]=h[15]+1; break;
[16]=h[16]+1; break;
[17]=h[17]+1; break;
[18]=h[18]+1; break;
[19]=h[19]+1; break;
[20]=h[20]+1; break;
[21]=h[21]+1; break;
[22]=h[22]+1; break;
[23]=h[23]+1; break;
[24]=h[24]+1; break;
[25]=h[25]+1; break;
[26]=h[26]+1; break;
[27]=h[27]+1; break;
[28]=h[28]+1; break;
[29]=h[29]+1; break;
[30]=h[30]+1; break;

83

case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case

54
55 :
56
57
58 :
59
60
61
62 :
63
64
65 :
66
67
68
69
70
71 :
72
73
74
75
76
77 :
78
79
80
81
82 :
83
84
85
86
87
88
89
90
91
92
93 :
94
95
96 :
97
98
99
100:

:
h
:
:
h
:
:
:
h
:
:
h
:
:
:
:
:
h
:
:
:
:
:
h
:
:
:
:
h
:
:
:
:
:
:
:
:
:
:
h
:
:
h
:
:
:
h

h [54]=h[54]+1; break;
[55]=h[55]+1; break;
h [56]=h[56]+1; break;
h [57]=h[57]+1; break;
[58]=h[58]+1; break;
h [59]=h[59]+1; break;
h [60]=h[60]+1; break;
h [61]=h[61]+1; break;
[62]=h[62]+1; break;
h [63]=h[63]+1; break;
h [64]=h[64]+1; break;
[65]=h[65]+1; break;
h [66]=h[66]+1; break;
h [67]=h[67]+1; break;
h [68]=h[68]+1; break;
h [69]=h[69]+1; break;
h [70]=h[70]+1; break;
[71]=h[71]+1; break;
h [72]=h[72]+1; break;
h [73]=h[73]+1; break;
h [74]=h[74]+1; break;
h [75]=h[75]+1; break;
h [76]=h[76]+1; break;
[77]=h[77]+1; break;
h [78]=h[78]+1; break;
h [79]=h[79]+1; break;
h [80]=h[80]+1; break;
h [81]=h[81]+1; break;
[82]=h[82]+1; break;
h [83]=h[83]+1; break;
h [84]=h[84]+1; break;
h [85]=h[85]+1; break;
h [86]=h[86]+1; break;
h [87]=h[87]+1; break;
h [88]=h[88]+1; break;
h [89]=h[89]+1; break;
h [90]=h[90]+1; break;
h [91]=h[91]+1; break;
h [92]=h[92]+1; break;
[93]=h[93]+1; break;
h [94]=h[94]+1; break;
h [95]=h[95]+1; break;
[96]=h[96]+1; break;
h [97]=h[97]+1; break;
h [98]=h[98]+1; break;
h [99]=h[99]+1; break;
[100]=h[100]+1; break;

84

case
case
case
case
case
case
case
case
case
case
case
case

101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:

h
h
h
h
h
h
h
h
h
h
h
h

[101]=h[101]+1;
[102]=h[102]+1;
[103]=h[103]+1;
[104]=h[104]+1;
[105]=h[105]+1;
[106]=h[106]+1;
[107]=h[107]+1;
[108]=h[108]+1;
[109]=h[109]+1;
[110]=h[110]+1;
[111]=h[111]+1;
[112]=h[112]+1;

break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;

case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case

113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:

h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h

[113]=h[113]+1;
[114]=h[114]+1;
[115]=h[115]+1;
[116]=h[116]+1;
[117]=h[117]+1;
[118]=h[118]+1;
[119]=h[119]+1;
[120]=h[120]+1;
[121]=h[121]+1;
[122]=h[122]+1;
[123]=h[123]+1;
[124]=h[124]+1;
[125]=h[125]+1;
[126]=h[126]+1;
[127]=h[127]+1;
[128]=h[128]+1;
[129]=h[129]+1;
[130]=h[130]+1;
[131]=h[131]+1;
[132]=h[132]+1;
[133]=h[133]+1;
[134]=h[134]+1;
[135]=h[135]+1;
[136]=h[136]+1;
[137]=h[137]+1;
[138]=h[138]+1;
[139]=h[139]+1;
[140]=h[140]+1;
[141]=h[141]+1;
[142]=h[142]+1;
[143]=h[143]+1;
[144]=h[144]+1;
[145]=h[145]+1;
[146]=h[146]+1;

break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;

85

case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case

147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:

h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h

[147]=h[147]+1;
[148]=h[148]+1;
[149]=h[149]+1;
[150]=h[150]+1;
[151]=h[151]+1;
[152]=h[152]+1;
[153]=h[153]+1;
[154]=h[154]+1;
[155]=h[155]+1;
[156]=h[156]+1;
[157]=h[157]+1;
[158]=h[158]+1;
[159]=h[159]+1;
[160]=h[160]+1;
[161]=h[161]+1;
[162]=h[162]+1;
[163]=h[163]+1;
[164]=h[164]+1;
[165]=h[165]+1;
[166]=h[166]+1;
[167]=h[167]+1;
[168]=h[168]+1;
[169]=h[169]+1;
[170]=h[170]+1;
[171]=h[171]+1;
[172]=h[172]+1;
[173]=h[173]+1;
[174]=h[174]+1;
[175]=h[175]+1;
[176]=h[176]+1;
[177]=h[177]+1;
[178]=h[178]+1;
[179]=h[179]+1;
[180]=h[180]+1;
[181]=h[181]+1;
[182]=h[182]+1;
[183]=h[183]+1;
[184]=h[184]+1;
[185]=h[185]+1;
[186]=h[186]+1;
[187]=h[187]+1;
[188]=h[188]+1;
[189]=h[189]+1;
[190]=h[190]+1;
[191]=h[191]+1;
[192]=h[192]+1;
[193]=h[193]+1;

break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;

86

case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case

194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:

h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h
h

[194]=h[194]+1;
[195]=h[195]+1;
[196]=h[196]+1;
[197]=h[197]+1;
[198]=h[198]+1;
[199]=h[199]+1;
[200]=h[200]+1;
[201]=h[201]+1;
[202]=h[202]+1;
[203]=h[203]+1;
[204]=h[204]+1;
[205]=h[205]+1;
[206]=h[206]+1;
[207]=h[207]+1;
[208]=h[208]+1;
[209]=h[209]+1;
[210]=h[210]+1;
[211]=h[211]+1;
[212]=h[212]+1;
[213]=h[213]+1;
[214]=h[214]+1;
[215]=h[215]+1;
[216]=h[216]+1;
[217]=h[217]+1;
[218]=h[218]+1;
[219]=h[219]+1;
[220]=h[220]+1;
[221]=h[221]+1;
[222]=h[222]+1;
[223]=h[223]+1;
[224]=h[224]+1;
[225]=h[225]+1;
[226]=h[226]+1;
[227]=h[227]+1;
[228]=h[228]+1;
[229]=h[229]+1;
[230]=h[230]+1;
[231]=h[231]+1;
[232]=h[232]+1;
[233]=h[233]+1;
[234]=h[234]+1;
[235]=h[235]+1;
[236]=h[236]+1;
[237]=h[237]+1;
[238]=h[238]+1;
[239]=h[239]+1;
[240]=h[240]+1;

break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;

87

case 241: h [241]=h[241]+1; break;


case 242: h [242]=h[242]+1; break;
case 243: h [243]=h[243]+1; break;
case 244: h [244]=h[244]+1; break;
case 245: h [245]=h[245]+1; break;
case 246: h [246]=h[246]+1; break;
case 247: h [247]=h[247]+1; break;
case 248: h [248]=h[248]+1; break;
case 249: h [249]=h[249]+1; break;
case 250: h [250]=h[250]+1; break;
case 251: h [251]=h[251]+1; break;
case 252: h [252]=h[252]+1; break;
case 253: h [253]=h[253]+1; break;
case 254: h [254]=h[254]+1; break;
case 255: h [255]=h[255]+1; break;
}
putpixel(j,k,i);
}
}
fclose(f);
getch();
clearviewport();
//-----------HISTOGRAM GENERATION CODE---------------//
line(100,201,400,201);
line(400,201,395,195);
line(400,201,395,207);
outtextxy(96,203,"0");
outtextxy(150,203,"50");
outtextxy(200,203,"100");
outtextxy(250,203,"150");
outtextxy(300,203,"200");
outtextxy(353,203,"255");
outtextxy(75,180,"400");
outtextxy(75,150,"700");
outtextxy(65,120,"1000");
outtextxy(65,90,"1300");
outtextxy(65,60,"1600");
outtextxy(65,30,"1900");
outtextxy(65,0,"2200");
settextstyle(2,0,4);
outtextxy(100,230,"THE PIXELS VALUES VARIES FROM 0 TO
255");
line(100,0,100,200);
line(100,0,95,5);
line(100,0,105,5);
settextstyle(2,1,4);
outtextxy(50,0,"NUMBER OF PIXELS FOR EACH GRAY LEVEL");

88

moveto(100,201-(h[0])/100);
setcolor(10);
for(k=1;k<=255;k++)
{lineto(k+100,200-(h[k])/10);
delay(10);}
setcolor(15);
getch();
clearviewport();
for(k=0;k<256;k++)
{
m=m+h[k];
A[k]=m;
}
An=m;
for(k=0;k<256;k++)
{
n=n+(k*h[k]);
}
Bn=n;
t=ceil(Bn/An);
/*RIDLER AND CALVARD AND TRUSSEL METHOD*/
//printf("THE VALUE OF THRESHOLD IS : %d",t);
u=0;
for(k=0;k<256;k++)
{
for(i=0;i<=t;i++)
{
n=n+h[k];
}
at=n;
for(i=0;i<=t;i++)
{
m=m+(k*h[k]);
}
bt=m;
ut=bt/at;
vt=abs((Bn-bt)/(An-at));
T[u]=(int)(ut+vt)/2;
if(T[u-1]==T[u])
{
threshold=T[u];

89

}
u=u+1;
}
printf("the threshold is %d",threshold);
getch();
clearviewport();
/*RESULT OF THE ALGORITHM*/
f=fopen(file,"rb+");
fread(r1,sizeof(*r1),1,f);
fseek(f,r1->start_1,0);
for(k=r1->height-1;k>=0;k--)
{
for(j=0;j<r1->width;j++)
{
i=fgetc(f);
putpixel(j,k,i);
if(i<=threshold)
putpixel(j+270,k,0);
else
putpixel(j+270,k,255);
}
}
settextstyle(1,0,1);
outtextxy(0,r1->height+20,"INPUT IMAGE");
outtextxy(270,r1->height+20,"OUTPUT IMAGE");
getch();
fclose(f);
closegraph();
} //END OF MAIN PROGRAM

90

BILEVEL METHOD
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<process.h>
#include<math.h>
#include<stdlib.h>
// header information of bmp image//
struct bmp {
char signature;
char signature1;
unsigned long size;
unsigned int offset_1;
unsigned int offset_2;
unsigned long start_1;
unsigned long start_2;
unsigned int width;
unsigned int none;
unsigned int height;
unsigned int none1;
unsigned int plane;
unsigned int pixel;
}r,*r1=&r;
// PROGRAM FOR BILEVEL IMAGE
void main ()
{
FILE *f; int i,gm,gd=DETECT; char file[50];
long j,k; unsigned
h[256]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
float
m[4]={1,0,0,0},p0=0,c0=0,c1=0,z0=0,z1=0,p1=0,pd=0,cd=0,t,sd
,ed;
initgraph(&gd,&gm," ");
/*------OPENING OF BMP FILE------*/

91

printf("Enter the name of file with path and extension as


BMP : ");
gets(file);
f=fopen(file,"rb+");
if(f==NULL)
{ printf("can't open the file");
getch();
exit(0);}
else printf("open file");
/* INFORMATION EXTRACT FROM STORED BMP IMAGE*/
fread(r1,sizeof(*r1),1,f);
printf("%c",r1->signature);
printf("%c\n",r1->signature1);
printf("size of image : %u\n",r1->size);
printf(" offset1: %u\n",r1->offset_1);
printf("offset_2: %u\n",r1->offset_2);
printf("offset start of image : %u\n",r1->start_1);
printf("offset of bmp header structure: %u\n",r1>start_2);
printf("width is : %u\n",r1->width);
printf("height is : %u\n",r1->height);
printf("no of plane in image : %u\n" ,r1->plane);
printf("bytes per pixel : %u\n",r1->pixel);
getch();
fseek(f,r1->start_1,0);
clearviewport();
/*BMP IMAGE GENERATION ON RASTER AND DISPLAY ON SCREEN*/
for(k=r1->height-1;k>=0;k--)
{
for(j=0;j<r1->width;j++)
{
i=fgetc(f);
h[i]++;
putpixel(j,k,i);
}
}
fclose(f);
getch();
clearviewport();
//-----------HISTOGRAM GENERATION CODE---------------//
line(100,201,400,201);
line(400,201,395,195);
line(400,201,395,207);
outtextxy(96,203,"0");
outtextxy(150,203,"50");
outtextxy(200,203,"100");
outtextxy(250,203,"150");

92

outtextxy(300,203,"200");
outtextxy(353,203,"255");
outtextxy(75,180,"400");
outtextxy(75,150,"700");
outtextxy(65,120,"1000");
outtextxy(65,90,"1300");
outtextxy(65,60,"1600");
outtextxy(65,30,"1900");
outtextxy(65,0,"2200");
settextstyle(2,0,4);
outtextxy(100,230,"THE PIXELS VALUES VARIES FROM 0 TO
255");
line(100,0,100,200);
line(100,0,95,5);
line(100,0,105,5);
settextstyle(2,1,4);
outtextxy(50,0,"NUMBER OF PIXELS FOR EACH GRAY LEVEL");
moveto(100,201-(h[0])/100);
setcolor(10);
for(k=1;k<=255;k++)
{lineto(k+100,200-(h[k])/10);
delay(10);}
setcolor(15);
getch();
clearviewport();
/*------BILEVEL ALGORITHM COMPUTATION------*/
m[0]=1;
for(k=0;k<=255;k++)
{
m[1]=m[1]+(k*h[k]);
m[2]=m[2]+(h[k]*(powl(k,2)));
m[3]=m[3]+(h[k]*(powl(k,3)));
}
m[1]=m[1]/(r1->height*r1->width);
m[2]=m[2]/(r1->height*r1->width);
m[3]=m[3]/(r1->height*r1->width);
cd=m[0]*m[2]-(m[1]*m[1]);
c0=m[1]*m[3]-(m[2]*m[2]);
c0=c0/cd;
c1=m[1]*m[2]-(m[0]*m[3]);
c1=c1/cd;
z0=-(c1+sqrt((c1*c1)-(4*c0)));
z0=z0/2;
z0=abs(ceil(z0));
z1= -(c1-sqrt((c1*c1)-(4*c0)));
z1=z1/2;

93

z1=abs(ceil(z1));
pd=z1-z0;
p0=z1-m[1];
p0=fabs(p0/pd);
p1=1-p0;
sd=0;
ed=0;
for(k=0;k<255;k++)
{
sd=sd+h[k];
ed=sd/(r1->height*r1->width);
if(ed>p0)
{ printf("\nThe value of threshold is : %d",k-1);
t=k-1;
break;
}
}
getch();
clearviewport();
/*------OUTPUT IMAGE GENERATION------*/
f=fopen(file,"rb+");
fread(r1,sizeof(*r1),1,f);
fseek(f,r1->start_1,0);
for(k=r1->height-1;k>=0;k--)
{
for(j=0;j<r1->width;j++)
{
i=fgetc(f);
putpixel(j,k,i);
if(i<=t-1)
putpixel(j+270,k,0);
else
putpixel(j+270,k,255);
}
}
settextstyle(1,0,1);
outtextxy(0,r1->height+20,"INPUT IMAGE");
outtextxy(270,r1->height+20,"OUTPUT IMAGE");
getch();
}

94

MEDIAN METHOD
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<process.h>
#include<math.h>
#include<stdlib.h>
// HEADER INFORMATION OF BMP IMAGE//
struct bmp {
char signature;
char signature1;
unsigned long size;
unsigned int offset_1;
unsigned int offset_2;
unsigned long start_1;
unsigned long start_2;
unsigned int width;
unsigned int none;
unsigned int height;
unsigned int none1;
unsigned int plane;
unsigned int pixel;
}r,*r1=&r;
// MAIN PROGRAM
void main ()
{
FILE *f; int i,gm,gd=DETECT; char file[50];
long j,k; unsigned
h[256]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
float m; int t;
initgraph(&gd,&gm," ");
//OPENING OF BMP FILE
printf("Enter the name of file with path and extension as
BMP : ");
gets(file);
95

f=fopen(file,"rb+");
if(f==NULL)
{ printf("can't open the file");
getch();
exit(0);}
else printf("open file");
/* INFORMATION EXTRACT FROM STORED BMP IMAGE*/
fread(r1,sizeof(*r1),1,f);
printf("%c",r1->signature);
printf("%c\n",r1->signature1);
printf("size of image : %u\n",r1->size);
printf(" offset1: %u\n",r1->offset_1);
printf("offset_2: %u\n",r1->offset_2);
printf("offset start of image : %u\n",r1->start_1);
printf("offset of bmp header structure: %u\n",r1>start_2);
printf("width is : %u\n",r1->width);
printf("height is : %u\n",r1->height);
printf("no of plane in image : %u\n" ,r1->plane);
printf("bytes per pixel : %u\n",r1->pixel);
getch();
fseek(f,r1->start_1,0);
clearviewport();
/*BMP IMAGE GENERATION ON RASTER AND DISPLAY ON SCREEN*/
for(k=r1->height-1;k>=0;k--)
{
for(j=0;j<r1->width;j++)
{
i=fgetc(f);
h[i]++;
putpixel(j,k,i);
}
}
fclose(f);
getch();
clearviewport();
//-----------HISTOGRAM GENERATION CODE---------------//
line(100,201,400,201);
line(400,201,395,195);
line(400,201,395,207);
outtextxy(96,203,"0");
outtextxy(150,203,"50");
outtextxy(200,203,"100");
outtextxy(250,203,"150");
outtextxy(300,203,"200");
outtextxy(353,203,"255");
outtextxy(75,180,"400");

96

outtextxy(75,150,"700");
outtextxy(65,120,"1000");
outtextxy(65,90,"1300");
outtextxy(65,60,"1600");
outtextxy(65,30,"1900");
outtextxy(65,0,"2200");
settextstyle(2,0,4);
outtextxy(100,230,"THE PIXELS VALUES VARIES FROM 0 TO
255");
line(100,0,100,200);
line(100,0,95,5);
line(100,0,105,5);
settextstyle(2,1,4);
outtextxy(50,0,"NUMBER OF PIXELS FOR EACH GRAY LEVEL");
moveto(100,201-(h[0])/100);
setcolor(10);
for(k=1;k<=255;k++)
{lineto(k+100,200-(h[k])/10);
delay(10);}
setcolor(15);
getch();
clearviewport();
/* MEDIAN ALGORITHM(HISTOGRAM BASED THRESHOLDING */
for(k=0;k<256;k++)
{
m=m+h[k];
if(abs(m)>((r1->height*r1->width)/2))
break;
}
t=k;
printf("THE VALUE OF THRESHOLD IS : %d",t);
getch();
clearviewport();
/*RESULT OF THE ALGORITHM*/
f=fopen(file,"rb+");
fread(r1,sizeof(*r1),1,f);
fseek(f,r1->start_1,0);
for(k=r1->height-1;k>=0;k--)
{
for(j=0;j<r1->width;j++)
{
i=fgetc(f);
putpixel(j,k,i);
if(i<=t-1)
putpixel(j+270,k,0);
else
putpixel(j+270,k,255);

97

}
}
settextstyle(1,0,1);
outtextxy(0,r1->height+20,"INPUT IMAGE");
outtextxy(240,r1->height+20,"OUTPUT IMAGE");
getch();
fclose(f);
closegraph();
} //END OF MAIN PROGRAM

98

MOMENT PRESERVING
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<process.h>
#include<math.h>
#include<stdlib.h>
// header information of bmp image//
typedef struct
{
int rows;
int cols;
char *data;
} sImage;
struct bmp
{
char signature;
char signature1;
unsigned long size;
unsigned int offset_1;
unsigned int offset_2;
unsigned long start_1;
unsigned long start_2;
unsigned int width;
unsigned int none;
unsigned int height;
unsigned int none1;
unsigned int plane;
unsigned int pixel;
}r,*r1=&r;
long getImageInfo(FILE*, long, int);
int main(int argc, char* argv[])
{/*--------PROTOTYPES------------*/
FILE
*histogramData, *bmpInput,
*rasterOutput,*gs;
sImage
originalImage;
unsigned char
someChar;
unsigned char
*pChar;
unsigned int
i,e=0,u1,uo;
unsigned int
sb,eta[256],st[256];
long int
hb[256],hw[256],ht[256];
int
grayValue, nColors,o=0,get,v,t,u;
unsigned int
iHist[256];
99

float
hist1[256],pt,pit;
float
p[256],pv[256];
unsigned int
totalNumberOfPixels;
char
op[20];
long
fileSize; /* BMP file size */
int
vectorSize,choice,s=0; /* BMP vector
size */
int
r,c,k,j,bmpinput,g=0,ksw;
/* r =
rows, c = cols */
long double
*a,*f;
unsigned int
thresholdValue,gaurav;float mint;
float ut,An,Bn,at,bt,m,n,p0,c0,c1,z0,vt;
int threshold,T[256];
unsigned A[256],B[256];
int gm,gd=DETECT;
a=(long double*)malloc(5000000);
initgraph(&gd,&gm,"c:\\tc\\bgi");
/* initialize pointer */
someChar = '0';
pChar = &someChar;
printf("enter the file name");
gets(op);
printf("Reading filename %s\n",op);
gs=fopen(op,"rb+");
if(gs==NULL)
printf("can't open the file");
else printf("open file");
fread(r1,sizeof(*r1),1,gs);
fseek(gs,r1->start_1,0);
for(k=r1->height;k>=0;k--)
{
for(j=0;j<r1->width;j++)
{
i=fgetc(gs);
putpixel(j,k,i);
}
}
/*-----DECLARE INPUT FILE-------*/
bmpInput = fopen(op, "rb");
fseek(bmpInput, 0L, SEEK_END);
/*------READ INPUT BMP DATA------*/
originalImage.cols = (int)getImageInfo(bmpInput, 18, 4);

100

originalImage.rows = (int)getImageInfo(bmpInput, 22, 4);


nColors = getImageInfo(bmpInput, 46, 4);
fileSize = getImageInfo(bmpInput, 2, 4);
vectorSize = fileSize - (14 + 40 + 4*nColors);
/*-------PRINT DATA TO SCREEN-------------*/
printf("%c",r1->signature);
printf("%c\n",r1->signature1);
printf(" offset1: %u\n",r1->offset_1);
printf("offset_2: %u\n",r1->offset_2);
printf("offset start of image : %u\n",r1->start_1);
printf("offset of bmp header structure: %u\n",r1>start_2);
printf("no of plane in image : %u\n" ,r1->plane);
printf("bytes per pixel : %u\n",r1->pixel);
printf("Width: %d\n", originalImage.cols);
printf("Height: %d\n", originalImage.rows);
printf("File size: %ld\n", fileSize);
printf("# Colors: %d\n", nColors);
printf("Vector size: %d\n", vectorSize);
delay(2000);
/*----START AT BEGINNING OF RASTER DATA-----*/
fseek(bmpInput, (54 + 4*nColors), SEEK_SET);
/*------INITIALIZE ARRAY------*/
for(i=0; i<=255; i++) iHist[i] = 0;
for(i=0; i<=255; i++) hist1[i] = 0;
totalNumberOfPixels = 0;
fseek(bmpInput, (54 + 4*nColors), SEEK_SET);
for(r=0; r<=originalImage.rows-1; r++)
{
for(c=0; c<=originalImage.cols-1; c++)
{
fread(pChar, sizeof(char), 1, bmpInput);
grayValue = *pChar;
iHist[grayValue] = iHist[grayValue] + 1;
totalNumberOfPixels++;
}
}
cleardevice();
getch();
//-----------HISTOGRAM GENERATION CODE---------------//
line(100,201,400,201);
line(400,201,395,195);

101

line(400,201,395,207);
outtextxy(96,203,"0");
outtextxy(150,203,"50");
outtextxy(200,203,"100");
outtextxy(250,203,"150");
outtextxy(300,203,"200");
outtextxy(353,203,"255");
outtextxy(75,180,"400");
outtextxy(75,150,"700");
outtextxy(65,120,"1000");
outtextxy(65,90,"1300");
outtextxy(65,60,"1600");
outtextxy(65,30,"1900");
outtextxy(65,0,"2200");
settextstyle(2,0,4);
outtextxy(90,230,"THE PIXELS VALUES VARIES FROM 0 TO
255");
line(100,0,100,200);
line(100,0,95,5);
line(100,0,105,5);
settextstyle(2,1,4);
outtextxy(50,0,"NUMBER OF PIXELS FOR EACH GRAY LEVEL");
moveto(100,201-(iHist[0])/100);
setcolor(10);
for(k=1;k<=255;k++)
{lineto(k+100,200-(iHist[k])/100);
delay(10);}
getch();
/*RIDLER AND CALVARD AND TRUSSEL METHOD*/
for(k=0;k<256;k++)
{
m=m+iHist[k];
A[k]=m;
}
An=m;
for(k=0;k<256;k++)
{
n=n+(k*iHist[k]);
}
Bn=n;
t=(Bn/An);
u=0;
for(k=0;k<256;k++)
{
for(i=0;i<=t;i++)

102

{
n=n+iHist[k];
}
at=n;
for(i=0;i<=t;i++)
{
m=m+(k*iHist[k]);
}
bt=m;
ut=bt/at;
vt=abs((Bn-bt)/(An-at));
T[u]=(int)(ut+vt)/2;
if(T[u]==T[u+1])
{
threshold=T[u];
}
}
printf("%d",threshold);
getch();
/*RESULT OF THE ALGORITHM*/
fseek(gs,r1->start_1,0);
for(k=r1->height-1;k>=0;k--)
for(j=0;j<r1->width;j++)
{
i=fgetc(gs);
putpixel(j,k,i);
}
fseek(gs,r1->start_1,0);
for(k=r1->height-1;k>=0;k--)
for(j=0;j<r1->width;j++)
{
i=fgetc(gs);
if(i<=threshold)
get=0;
else
get=255;
putpixel(j+290,k,get);
}
settextstyle(1,0,1);
outtextxy(0,r1->height+20,"INPUT IMAGE");
outtextxy(240,r1->height+20,"OUTPUT IMAGE");
getch();

103

}
/*----------GET IMAGE INFO SUBPROGRAM--------------*/
long getImageInfo(FILE* inputFile, long offset, int
numberOfChars)
{
unsigned char
*ptrC;
long
value = 0L;
unsigned char
dummy;
int
i;
dummy = '0';
ptrC = &dummy;
fseek(inputFile, offset, SEEK_SET);
for(i=1; i<=numberOfChars; i++)
{
fread(ptrC, sizeof(char), 1, inputFile);
/* calculate value based on adding bytes */
value = (long)(value + (*ptrC)*(pow(256, (i-1))));
}
return(value);
} /* end of getImageInfo */

104

OTSU METHOD
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include"graphics.h"
/*----------STRUCTURES-----------*/
typedef struct
{
int rows;
int cols;
char *data;
} sImage;
struct bmp
{
char signature;
char signature1;
unsigned long size;
unsigned int offset_1;
unsigned int offset_2;
unsigned long start_1;
unsigned long start_2;
unsigned int width;
unsigned int none;
unsigned int height;
unsigned int none1;
unsigned int plane;
unsigned int pixel;
}r,*r1=&r;
long getImageInfo(FILE*, long, int);
int main(int argc, char* argv[])
{/*--------PROTOTYPES------------*/
FILE
*histogramData, *bmpInput,
*rasterOutput,*gs;
sImage
originalImage;
unsigned char
someChar;
unsigned char
*pChar;
unsigned int
i,e=0,u1,uo;
unsigned int
sb,eta[256],st[256];
long int
hb[256],hw[256],ht[256];
unsigned int
ut=0,ut1=0,wo=0,w1,z,array[256],t=0;
int
grayValue, nColors,o=0,get,v;
unsigned int
iHist[256];
float
hist1[256],pt,pit;
105

float
p[256],pv[256];
long int
totalNumberOfPixels;
char
n[20];
long
fileSize; /* BMP file size */
int
vectorSize,choice; /* BMP vector size */
int
r,c,k,j,bmpinput,g=0,ksw;
/* r =
rows, c = cols */
long double
*a,*f;
unsigned int
threshold,thresholdValue,gaurav;
int gm,gd=DETECT;
a=(long double*)malloc(5000000);
initgraph(&gd,&gm,"c:\\tc\\bgi");
/* initialize pointer */
someChar = '0';
pChar = &someChar;
printf("enter the file name");
gets(n);
printf("Reading filename %s\n",n);
gs=fopen(n,"rb+");
if(gs==NULL)
printf("can't open the file");
else printf("open file");
fread(r1,sizeof(*r1),1,gs);
fseek(gs,r1->start_1,0);
for(k=r1->height;k>=0;k--)
{
for(j=0;j<r1->width;j++)
{
i=fgetc(gs);
putpixel(j,k,i);
}
}
/*-----DECLARE INPUT FILE-------*/
bmpInput = fopen(n, "rb");
fseek(bmpInput, 0L, SEEK_END);
/*------READ INPUT BMP DATA------*/
originalImage.cols = (int)getImageInfo(bmpInput, 18, 4);
originalImage.rows = (int)getImageInfo(bmpInput, 22, 4);
nColors = getImageInfo(bmpInput, 46, 4);
fileSize = getImageInfo(bmpInput, 2, 4);
vectorSize = fileSize - (14 + 40 + 4*nColors);
// clearviewport();

106

/*-------PRINT DATA TO SCREEN-------------*/


/* printf("%c",r1->signature);
printf("%c\n",r1->signature1);
printf(" offset1: %u\n",r1->offset_1);
printf("offset_2: %u\n",r1->offset_2);
printf("offset start of image : %u\n",r1->start_1);
printf("offset of bmp header structure: %u\n",r1>start_2);
printf("no of plane in image : %u\n" ,r1->plane);
printf("bytes per pixel : %u\n",r1->pixel);
printf("Width: %d\n", originalImage.cols);
printf("Height: %d\n", originalImage.rows);
printf("File size: %ld\n", fileSize);
printf("# Colors: %d\n", nColors);
printf("Vector size: %d\n", vectorSize);
delay(2000);
/*----START AT BEGINNING OF RASTER DATA-----*/
fseek(bmpInput, (54 + 4*nColors), SEEK_SET);
/*------INITIALIZE ARRAY------*/
for(i=0; i<=255; i++) iHist[i] = 0;
for(i=0; i<=255; i++) hist1[i] = 0;
totalNumberOfPixels = 0;
fseek(bmpInput, (54 + 4*nColors), SEEK_SET);
for(r=0; r<=originalImage.rows-1; r++)
{
for(c=0; c<=originalImage.cols-1; c++)
{
fread(pChar, sizeof(char), 1, bmpInput);
grayValue = *pChar;
iHist[grayValue] = iHist[grayValue] + 1;
totalNumberOfPixels++;
}
}
/*IMPLEMENTATION OF OTSU ALGORITHM*/
/*TO CALCULATE THE VALUE OF ut*/
/*cleardevice();
line(100,201,400,201);
line(400,201,395,195);
line(400,201,395,207);
outtextxy(96,203,"0");
outtextxy(150,203,"50");
outtextxy(200,203,"100");

107

outtextxy(250,203,"150");
outtextxy(300,203,"200");
outtextxy(353,203,"255");
outtextxy(75,180,"400");
outtextxy(75,150,"700");
outtextxy(65,120,"1000");
outtextxy(65,90,"1300");
outtextxy(65,60,"1600");
outtextxy(65,30,"1900");
outtextxy(65,0,"2200");
settextstyle(2,0,4);
outtextxy(90,230,"THE PIXELS VALUES VARIES FROM 0 TO
255");
line(100,0,100,200);
line(100,0,95,5);
line(100,0,105,5);
settextstyle(2,1,4);
outtextxy(50,0,"NUMBER OF PIXELS FOR EACH GRAY LEVEL");
moveto(100,201-(iHist[0])/100);
setcolor(10);
/* for(i=0;i<=255;i++)
{
p[i] = (float)iHist[i]/(float)totalNumberOfPixels;
hist1[i] = iHist[i]/100;
delay(10);
lineto(i+100,200-hist1[i]);
i=i+1;
}
setcolor(15);*/
// clearviewport();
for(r=0; r<=originalImage.rows-1; r++)
{
for(c=0; c<=originalImage.cols-1; c++)
{
fread(pChar, sizeof(char), 1, bmpInput);
for(i=0;i<*pChar;i++)
p[i] = (float)iHist[i]/(float)totalNumberOfPixels;
{
ut=ut+(i*p[i]);
}
}
}
// clearviewport();
/*TO CALCULATE THE VALUE OF UT*/

108

for(i=0;i<256;i++)
{
p[i] = (float)iHist[i]/(float)totalNumberOfPixels;
ut1=ut1+(i*p[i]);
}
/*TO CALCULATE THE VALUE OF WO*/
for(r=0; r<=originalImage.rows-1; r++)
{
for(c=0; c<=originalImage.cols-1; c++)
{
fread(pChar, sizeof(char), 1, bmpInput);
for(i=0;i<*pChar;i++)
p[i] = (float)iHist[i]/(float)totalNumberOfPixels;
{
wo=wo+p[i];
}
}
}
w1=1-wo;
u1= (ut1-ut)/w1;
wo=1;
uo=ut/wo;
sb=sqrt(w1*uo*uo*u1*u1);
for(i=0;i<256;i++)
{
st[z]=sqrt(((i-ut1)*(i-ut1))*p[i]);
}
for(z=0;z<256;z++)
{
if(sb==0)
sb=1;
eta[o]=st[z]/sb;
o=o+1;
}
for(z=0;z<256;z++)
{
if(eta[z]>eta[z+1])
eta[z+1]=eta[z];
threshold=eta[z+1];
}
if (threshold>256)
{
threshold=threshold/1000;
}
threshold=thresholdValue;
//clearviewport();

109

fseek(gs,r1->start_1,0);
for(k=r1->height;k>=0;k--)
{
for(j=0;j<r1->width;j++)
{
get=fgetc(gs);
{
if(get<thresholdValue)
get=0;
else
get=255;
}
putpixel(j+290,k,get);
}
}
settextstyle(1,0,1);
outtextxy(0,r1->height+20,"INPUT IMAGE");
outtextxy(290,r1->height+20,"OUTPUT IMAGE");
getch();
}
/*----------GET IMAGE INFO SUBPROGRAM--------------*/
long getImageInfo(FILE* inputFile, long offset, int
numberOfChars)
{
unsigned char
*ptrC;
long
value = 0L;
unsigned char
dummy;
int
i;
dummy = '0';
ptrC = &dummy;
fseek(inputFile, offset, SEEK_SET);
for(i=1; i<=numberOfChars; i++)
{
fread(ptrC, sizeof(char), 1, inputFile);
/* calculate value based on adding bytes */
value = (long)(value + (*ptrC)*(pow(256, (i-1))));
}
return(value);
} /* end of getImageInfo */

110

Potrebbero piacerti anche