Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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
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
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
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
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