You are on page 1of 7

PraktikumPengantarPengolahan Citra Digital (Kom421) Praktikum7

NRP NamaDosen

: G64104049 : Ibu Yeni

NamaAsisten : Sdri. Mega

A. LembarKerjaPraktikum
Buatlahsebuah program untukmereduksi noise denganmenggunakansmoothtypeuntuksemua noise yang telahdipelajari. CV_BLUR CV_GAUSSIAN CV_MEDIAN
"stdafx.h" <cv.h> <highgui.h> <math.h> <float.h> NOISE_UNIFORM 0 NOISE_GAUSSIAN 1 NOISE_EXPONENTIAL 2 NOISE_RAYLEIGH 3 NOISE_GAMMA 4 NOISE_IMPULSE 5

#include #include #include #include #include #define #define #define #define #define #define

IplImage* DrawHistogram(IplImage* img) { CvSize imgSize = cvGetSize(img); int area = imgSize.width*imgSize.height; IplImage* ret = cvCreateImage(cvSize(257, 100), 8, 1); cvZero(ret); int freq[256] = {0}; int max=0; for(int x=0;x<imgSize.width;x++) { for(int y=0;y<imgSize.height;y++) { int curr = (int)cvGetReal2D(img, y, x); freq[curr]++; if(freq[curr]>max) max = freq[curr]; } } for(int k=0;k<256;k++) { int value = ((float)(100*freq[k])/(float)max); cvLine(ret, cvPoint(k, 100), cvPoint(k, 100-value), cvScalar(255,255,255)); } cvNot(ret, ret); return ret; } double uniform() _____________________________________________________________________________________ DepartemenIlmuKomputer InstitutPertanian Bogor 1

PraktikumPengantarPengolahan Citra Digital (Kom421) Praktikum7

{ return (rand()/(float)0x7fff); } double gaussian(void) { static double v, fac; static int phase = 0; double S, Z, U1, U2, u; if (phase) Z = v * fac; else { do { U1 = uniform(); U2 = uniform(); u = 2. * U1 - 1.; v = 2. * U2 - 1.; S = u * u + v * v; } while(S >= 1); fac = sqrt (-2. * log(S) / S); Z = u * fac; } phase = 1 - phase; return Z; } double exponential(float lambda=1) { return -lambda*log(uniform()); } double rayleigh(float sigma=1) { return sigma*sqrt(-1*log(uniform())); } double gamma(int k=2) { double ret=0; while(k>0) { ret+= (-(log(uniform()))); k--; } return ret; } double impulse(float amount) { if(uniform()>1-amount) return 100; if(uniform()<amount) return -100; return 0; } IplImage* GenerateNoise(IplImage* img, int noiseType, float amount=255) { CvSize imgSize = cvGetSize(img); IplImage* imgTemp = cvCloneImage(img); _____________________________________________________________________________________ DepartemenIlmuKomputer InstitutPertanian Bogor 2

PraktikumPengantarPengolahan Citra Digital (Kom421) Praktikum7

for(int y=0;y<imgSize.height;y++) { for(int x=0;x<imgSize.width;x++) { int randomValue=0; switch(noiseType) { case NOISE_UNIFORM: randomValue = (char)(uniform()*amount); break; case NOISE_EXPONENTIAL: randomValue = (int)(exponential()*amount); break; case NOISE_GAUSSIAN: randomValue = (int)(gaussian()*amount); break; case NOISE_RAYLEIGH: randomValue = (int)(rayleigh()*amount); break; case NOISE_GAMMA: randomValue = (int)(gamma()*amount); break; case NOISE_IMPULSE: randomValue = (int)(impulse((float)amount/256)*amount); } int pixelValue = cvGetReal2D(imgTemp, y, x)+randomValue; cvSetReal2D(imgTemp, y, x, pixelValue); }}return imgTemp;} int main() { IplImage* img = cvLoadImage("image.jpeg", 0); IplImage* imgTemp; IplImage* imgHist; int noiseType=NOISE_EXPONENTIAL; int trackPos = 20; cvNamedWindow("Image"); cvNamedWindow("Histogram"); imgTemp = GenerateNoise(img, noiseType, trackPos); imgHist = DrawHistogram(imgTemp); IplImage* imgResult = cvCreateImage(cvGetSize(imgTemp),IPL_DEPTH_8U,1); cvSmooth(imgTemp, imgResult,CV_BLUR ); cvShowImage("Image", imgTemp); cvShowImage("Result", imgResult); cvShowImage("Histogram", imgHist); cvReleaseImage(&imgHist); cvReleaseImage(&imgResult); cvReleaseImage(&imgTemp); cvWaitKey(0); cvReleaseImage(&img); return 0;} _____________________________________________________________________________________ DepartemenIlmuKomputer InstitutPertanian Bogor 3

PraktikumPengantarPengolahan Citra Digital (Kom421) Praktikum7

NOISE_EXPONENTIAL

CV_BLUR

CV_GAUSSIAN

CV_MEDIAN

NOISE_UNIFORM

CV_BLUR

CV_GAUSSIAN

CV_MEDIAN

_____________________________________________________________________________________ DepartemenIlmuKomputer InstitutPertanian Bogor 4

PraktikumPengantarPengolahan Citra Digital (Kom421) Praktikum7

NOISE_GAUSSIAN

CV_BLUR

CV_GAUSSIAN

CV_MEDIAN

NOISE_RAYLEIGH

CV_BLUR

CV_GAUSSIAN

CV_MEDIAN

_____________________________________________________________________________________ DepartemenIlmuKomputer InstitutPertanian Bogor 5

PraktikumPengantarPengolahan Citra Digital (Kom421) Praktikum7

NOISE_GAMMA

CV_BLUR

CV_GAUSSIAN

CV_MEDIAN

NOISE_IMPULSE

CV_BLUR

CV_GAUSSIAN

CV_MEDIAN

_____________________________________________________________________________________ DepartemenIlmuKomputer InstitutPertanian Bogor 6

PraktikumPengantarPengolahan Citra Digital (Kom421) Praktikum7

Kesimpulan : Tipe smoothing CV_MEDIAN lebih bagus di banding kan dengan 2 tipe smoothing lain nya. Sedangkan, tipe smoothing CV_GAUSSIAN lebih tajam hasilnya jika di banding kan dengan CV_BLUR. Tipe smoothing CV_MEDIAN dapat menghilangkan noise dan tajam hasil smoothing , tipe smoothing CV_GAUSSIAN dapat mempertajam gamabar yang telah di kena noise dan tipe smoothing CV_BLUR dapat memperhalus gambar yang kena noise.

_____________________________________________________________________________________ DepartemenIlmuKomputer InstitutPertanian Bogor 7

You might also like