Professional Documents
Culture Documents
Transformation function is shown in the graph. Locations of the points (r1, s1) and
(r2, s2) used to control the shape of the transformation function. If r1=s1 and r2=s2
transformation is linear function and produces no changes in the gray level. If
r1=r2, s1=0 and s2=L-1, transformation becomes a thresholding function that
results a binary image. Intermediate values of (r1, s1) and (r2, s2) produce various
degrees of spread in the gray levels of the output image, thus affecting its contrast.
Most implementations accept a graylevel image as input and
produce another graylevel image as output.
1- Contrast stretching.
#include <dos.h>
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define WIDTH_OFF 18
#define HEIGHT_OFF 22
int width,height;
void printscreen(void);
void contrast_stretching(void);
void bitplane(void);
void power_log(void);
void main()
FILE *fp;
char filename[15];
int i,j,opt,r1,r2,s1,s2,opt1;
init_graphics();
getch();
exit(0);
}
scanf("%d",&opt);
switch(opt)
case 1:
clrscr();
cleardevice();
dispimage(0);
for(j=0;j<width;j++)
pixel[i][j]=255-pixel[i][j];
dispimage(1);
break;
case 2:
clrscr();
cleardevice();
dispimage(0);
power_log();
dispimage(1);
break;
case 3:
clrscr();
cleardevice();
dispimage(0);
contrast_stretching();
dispimage(1);
break;
case 4:
clrscr();
cleardevice();
scanf("%d",&opt1);
scanf("%d%d",&r1,&r2);
scanf("%d",&s1);
switch(opt1)
{ case 1:
printf("\n\nEnter the low output level : ");
scanf("%d",&s2);
clrscr();
cleardevice();
dispimage(0);
for(i=0;i<height;i++)
for(j=0;j<width;j++)
if(pixel[i][j]<=r1 || pixel[i][j]>=r2)
pixel[i][j]=s2;
else
pixel[i][j]=s1;
dispimage(1);
break;
case 2:
clrscr();
cleardevice();
dispimage(0);
for(i=0;i<height;i++)
for(j=0;j<width;j++)
{
pixel[i][j]=s1;
dispimage(1);
break;
break;
case 5:
clrscr();
cleardevice();
dispimage(0);
bitplane();
dispimage(1);
break;
case 6:
exit(0);
break;
default:
getch();
exit(0);
};
getch();
clrscr();
cleardevice();
filecreate();
getch();
int i,j;
for(i=0;i<height;i++)
for(j=0;j<width;j++)
if(pos==0)
else
putpixel(j+320,480-i,(pixel[i][j])/16);
void init_graphics()
{
int i;
errorcode = graphresult();
if (errorcode != grOk)
getch();
exit(1);
for(i=0;i<pal.size;i++)
setrgbpalette(pal.colors[i],i*4,i*4,i*4);
int i,j,k;
width=(int)img_width;
height=(int)img_height;
for(i=0;i<height;i++)
for(j=0;j<width;j++)
pixel[i][j]=fgetc(fp);
for(k=0;k<(4-(width%4));k++)
fgetc(fp);
}
}
void contrast_stretching()
int r1,r2,s1,s2,i,j;
float m1,m2,m3;
scanf("%d %d",&r1,&s1);
scanf("%d %d",&r2,&s2);
m1=(float)s1/(float)r1;
m2=(float)(s2-s1)/(float)(r2-r1);
m3=(float)(255-s2)/(float)(255-r2);
for(i=0;i<height;i++)
for(j=0;j<width;j++)
if(pixel[i][j]<r1)
else
void power_log()
int i,j;
double c,t,val;
printf("Enter the power factor (E.g (0<pf<1) lighter (pf>1) darker : ");
scanf("%lf",&val);
c=((double)255.0)/pow((double)255.0,val);
for(j=0;j<width;j++)
t=pow((double)pixel[i][j],val);
pixel[i][j]=(unsigned char)(c*t);
void bitplane()
{
int i,j,
bit;
char mask;
scanf("%d",&bit);
mask=pow(2,(bit));
for(j=0;j<width;j++)
if(pixel[i][j]&mask)
pixel[i][j]=mask;
else
pixel[i][j]=0;
void filecreate()
int i,j,k;
FILE *fp;
fflush(stdin);
gets(filename);
fcloseall();
getch();
exit(0);
fseek(fp,0,SEEK_SET);
fwrite(&imghead,PIXEL_OFF,1,fp);
for(i=0;i<height;i++)
for(j=0;j<width;j++)
fputc(pixel[i][j],fp);
{
for(k=0;k<(4-(width%4));k++)
fclose(fp);
Low
contrast Image
Higher Contrast
Image (r1=100, s1=60; r2=180,s2=240)