Download - Digital Image Processing Using Visual C++
![Page 1: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/1.jpg)
Digital Image Processing Using Visual C++
Muhammad Salman HabibBCS 6th Semester
![Page 2: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/2.jpg)
Chapter 4, 5, 6• Main Review
– Functions Applied in these chapters on Images are• Reverse Image• Contrast +• Contrast – • Histogram• Binirization• Dynamic Binirization• Histogram Equal• Histogram Stretch• Histogram UpStretch
![Page 3: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/3.jpg)
Reverse Image
Reverse the Image Pixels• void CWinTestDoc::OnReverseImg() • {• for(int i=0; i<256; i++)• {• for(int j=0; j<256; j++) m_OutImg[i][j] = 255-m_InImg[i][j];• }• UpdateAllViews(NULL);• }
![Page 4: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/4.jpg)
Contrast +Increase the Image Contrast
• void CWinTestView::OnConstAdd() • {• // TODO: Add your command handler code here• CWinTestDoc* pDoc = GetDocument();• ASSERT_VALID(pDoc);• for(int i=0; i<height; i++)• {• for(int j=0; j<width; j++)• {• int tempVal = pDoc->m_InImg[i][j]+60;• tempVal = tempVal > 255 ? 255: tempVal;• tempVal = tempVal < 0 ? 0: tempVal;• pDoc->m_OutImg[i][j] = (unsigned char)tempVal;• }• }• Invalidate(FALSE); //• }
![Page 5: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/5.jpg)
Contrast +
![Page 6: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/6.jpg)
• void CWinTestView::OnConstSub() • {• // TODO: Add your command handler code here• CWinTestDoc* pDoc = GetDocument(); • ASSERT_VALID(pDoc);• for(int i=0; i<height; i++)• {• for(int j=0; j<width; j++)• {• int tempVal = pDoc->m_InImg[i][j]-60;• tempVal = tempVal > 255 ? 255: tempVal;• tempVal = tempVal < 0 ? 0: tempVal;• pDoc->m_OutImg[i][j] = (unsigned
char)tempVal;• }• }• Invalidate(FALSE);• }
Contrast -
![Page 7: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/7.jpg)
Contrast -
![Page 8: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/8.jpg)
Generates the Histogram Graph of Image
void CWinTestDoc::m_ImgHisto(int height, int width)• {• int i,j,vmax,vmin;• for(i=0; i<256; i++) m_HistoArr[i]=0;
• for(i=0; i<height; i++)• {• for(j=0; j<width; j++)• {• int gv = (int)m_InImg[i][j];• m_HistoArr[gv]++;• }• }• vmin = 1000000; vmax =0;• for(i=0; i<256; i++) • {• if(m_HistoArr[i]<=vmin) vmin = m_HistoArr[i];• if(m_HistoArr[i]>=vmax) vmax = m_HistoArr[i];• }• if(vmax==vmin) return;• float vd = (float)(vmax-vmin);• for(i=0; i<256; i++)
Histogram
![Page 9: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/9.jpg)
Histogram• {• m_HistoArr[i] = (int)( ((float)m_HistoArr[i]-
vmin)*255.0/vd);• }
• for(i=0; i<height; i++) • for(j=0; j<width; j++) m_OutImg[i][j] = 255;
• for(j=0; j<width; j++)• {• for(i=0; i<m_HistoArr[j]; i++) m_OutImg[255-i][j] = 0;• }• }• void CWinTestDoc::m_BinThres(int height, int width, int binThres)• {• for(int i=0; i<height; i++)• {• for(int j=0; j<width; j++)• {• if(m_InImg[i][j]>binThres) m_OutImg[i][j] = 255;• else m_OutImg[i][j] = 0;• }• }• }
![Page 10: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/10.jpg)
Histogram
![Page 11: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/11.jpg)
Binirization• void CWinTestView::OnBinarization() • {• // TODO: Add your command handler code here• CWinTestDoc* pDoc = GetDocument();
• ASSERT_VALID(pDoc);
• for(int i=0; i<height; i++)• {• for(int j=0; j<width; j++)• {• if(pDoc->m_InImg[i][j]>100) pDoc->m_OutImg[i][j]=255;• else pDoc->m_OutImg[i][j]=0;• }• }
• Invalidate(FALSE); • }
![Page 12: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/12.jpg)
Binirization
![Page 13: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/13.jpg)
Dynamic Binirization• void CWinTestView::OnBinDynamic() • {• // TODO: Add your command handler code here• CBinCntrlDlg pbinCtrlDlg;• pbinCtrlDlg.DoModal();• }
![Page 14: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/14.jpg)
Histogram Equal
• void CWinTestView::OnHistoEqual() • {• // TODO: Add your command handler code here• CWinTestDoc* pDoc = GetDocument(); • ASSERT_VALID(pDoc);
• pDoc->m_HistoEqual(256,256);
• Invalidate(FALSE); • }
![Page 15: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/15.jpg)
Histogram Equal
![Page 16: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/16.jpg)
Histogram Stretch• void CWinTestView::OnHistoStretch() • {• // TODO: Add your command handler code here• CWinTestDoc* pDoc = GetDocument(); • ASSERT_VALID(pDoc);• pDoc->m_HistoStretch(256,256); • Invalidate(FALSE);• }
![Page 17: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/17.jpg)
Histogram UpStretch• void CWinTestView::OnHistoUpstretch() • {• // TODO: Add your command handler code here• CWinTestDoc* pDoc = GetDocument(); • ASSERT_VALID(pDoc);• pDoc->m_HistoUpStretch(256,256,20,20); • Invalidate(FALSE);• }
![Page 18: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/18.jpg)
Chapter 7• Main Review
– Functions Applied in this chapter on Images are
• Smoothing Box• Smoothing (Gaussian)• Sharpening (Laplacian) • Edge (Prewitt)• Edge (Sobel)
![Page 19: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/19.jpg)
Smoothing Box• void CWinTestDoc::m_SmoothingBox(int height, int width)• {• int MaskBox[3][3]={{1,1,1}, {1,1,1}, {1,1,1}};• int heightm1=height-1;• int widthm1=width-1;• int mr,mc;• int newValue;• int i,j;• for(i=0;i<height;i++)• for(j=0;j<width;j++)• m_OutImg[i][j]=0;• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• newValue=0; • for(mr=0;mr<3;mr++)• for(mc=0;mc<3;mc++)• newValue += (MaskBox[mr][mc]*m_InImg[i+mr-1][j+mc-1]);• newValue /= 9;• m_OutImg[i][j]=(BYTE)newValue; • }• }• }
![Page 20: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/20.jpg)
Smoothing Box
![Page 21: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/21.jpg)
Smoothing (Gaussian)• void CWinTestDoc::m_SmoothingGaussian(int height, int width)• {• int MaskGaussian[3][3]={{1,2,1}, {2,4,2}, {1,2,1}};• int heightm1=height-1;• int widthm1=width-1;• int mr,mc;• int newValue;• int i,j;• for(i=0;i<height;i++)• for(j=0;j<width;j++)• m_OutImg[i][j]=0;• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• newValue=0;• for(mr=0;mr<3;mr++)• for(mc=0;mc<3;mc++)• newValue += (MaskGaussian[mr][mc]*m_InImg[i+mr-1][j+mc-1]);• newValue /= 20;• m_OutImg[i][j]=(BYTE)newValue; • }• }• }
![Page 22: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/22.jpg)
Smoothing (Gaussian)
![Page 23: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/23.jpg)
Sharpening (Laplacian)• void CWinTestDoc::m_SharpeningLaplacian(int height, int width)• {• int MaskBox[3][3]={{-1,-1,-1}, {-1,8,-1}, {-1,-1,-1}};• int heightm1=height-1;• int widthm1=width-1;• int mr,mc;• int newValue;• int i,j;• int *pTmpImg;• int min,max;• float constVal1,constVal2;• pTmpImg=new int[height*width];• for(i=0;i<height;i++)• for(j=0;j<width;j++)• {• m_OutImg[i][j]=0;• pTmpImg[i*width+j]=0;• }
• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• newValue=0; //0À¸·Î ÃʱâÈ • for(mr=0;mr<3;mr++)• for(mc=0;mc<3;mc++)• newValue += (MaskBox[mr][mc]*m_InImg[i+mr-1][j+mc-1]);•
![Page 24: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/24.jpg)
• if(newValue<0)• newValue=-newValue;• pTmpImg[i*width+j]=newValue;• }• }• min=(int)10e10;• max=(int)-10e10;• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• newValue=pTmpImg[i*width+j];• if(newValue<min)• min=newValue;• if(newValue>max)• max=newValue;• }• }• constVal1=(float)(255.0/(max-min));• constVal2=(float)(-255.0*min/(max-min));• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• newValue=pTmpImg[i*width+j];• newValue=constVal1*newValue+constVal2;• m_OutImg[i][j]=(BYTE)newValue;• }• }• delete [] pTmpImg;• }
![Page 25: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/25.jpg)
Sharpening (Laplacian)
![Page 26: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/26.jpg)
Edge (Prewitt)• void CWinTestDoc::m_EdgePrewitt(int height, int width)• {• int MaskPrewittX[3][3]={{-1,0,1}, {-1,0,1}, {-1,0,1}};• int MaskPrewittY[3][3]={{1,1,1}, {0,0,0}, {-1,-1,-1}};• int heightm1=height-1;• int widthm1=width-1;• int mr,mc;• int newValue;• int i,j;• int *pImgPrewittX,*pImgPrewittY;• int min,max,where;• float constVal1,constVal2;• pImgPrewittX=new int[height*width];• pImgPrewittY=new int[height*width];• for(i=0;i<height;i++)• for(j=0;j<width;j++)• {• m_OutImg[i][j]=0;• where=i*width+j;• pImgPrewittX[where]=0;• pImgPrewittY[where]=0;• }• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• newValue=0; • for(mr=0;mr<3;mr++)• for(mc=0;mc<3;mc++)• newValue += (MaskPrewittX[mr]
[mc]*m_InImg[i+mr-1][j+mc-1]);• pImgPrewittX[i*width+j]=newValue;• }• }•
![Page 27: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/27.jpg)
• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• newValue=0; • for(mr=0;mr<3;mr++)• for(mc=0;mc<3;mc++)• newValue += (MaskPrewittY[mr][mc]*m_InImg[i+mr-1][j+mc-1]);• pImgPrewittY[i*width+j]=newValue;• }• } • for(i=1;i<heightm1;i++)• for(j=1;j<widthm1;j++)• {• where=i*width+j;• constVal1=pImgPrewittX[where];• constVal2=pImgPrewittY[where];• if(constVal1<0)• constVal1=-constVal1;• if(constVal2<0)• constVal2=-constVal2;• pImgPrewittX[where]=constVal1+constVal2;• }• min=(int)10e10;• max=(int)-10e10;• for(i=1; i<heightm1; i++)• {•
![Page 28: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/28.jpg)
• for(j=1; j<widthm1; j++)• {• newValue=pImgPrewittX[i*width+j];• if(newValue<min)• min=newValue;• if(newValue>max)• max=newValue;• }• }• constVal1=(float)(255.0/(max-min));• constVal2=(float)(-255.0*min/(max-min));• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• newValue=pImgPrewittX[i*width+j];• newValue=constVal1*newValue+constVal2;• m_OutImg[i][j]=(BYTE)newValue;• }• }• delete [] pImgPrewittX;• delete [] pImgPrewittY;• }
![Page 29: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/29.jpg)
Edge (Prewitt)
![Page 30: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/30.jpg)
Edge (Sobel)• void CWinTestDoc::m_EdgeSobel(int height, int width)• {• int MaskSobelX[3][3]={{-1,0,1}, {-2,0,2}, {-1,0,1}};• int MaskSobelY[3][3]={{1,2,1}, {0,0,0}, {-1,-2,-1}};• int heightm1=height-1;• int widthm1=width-1;• int mr,mc;• int newValue;• int i,j;• int *pImgSobelX,*pImgSobelY;• int min,max,where;• float constVal1,constVal2;• pImgSobelX=new int[height*width];• pImgSobelY=new int[height*width];• for(i=0;i<height;i++)• for(j=0;j<width;j++)• {• m_OutImg[i][j]=0;• where=i*width+j;• pImgSobelX[where]=0;• pImgSobelY[where]=0;• }• for(i=1; i<heightm1; i++)•
![Page 31: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/31.jpg)
• {• for(j=1; j<widthm1; j++)• {• newValue=0;• for(mr=0;mr<3;mr++)• for(mc=0;mc<3;mc++)• newValue += (MaskSobelX[mr][mc]*m_InImg[i+mr-1][j+mc-1]);• pImgSobelX[i*width+j]=newValue;• }• }• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• newValue=0;• for(mr=0;mr<3;mr++)• for(mc=0;mc<3;mc++)• newValue += (MaskSobelY[mr][mc]*m_InImg[i+mr-1][j+mc-1]);• pImgSobelY[i*width+j]=newValue;• }• }• for(i=1;i<heightm1;i++)• for(j=1;j<widthm1;j++)• {• where=i*width+j;• constVal1=pImgSobelX[where];• constVal2=pImgSobelY[where];• if(constVal1<0)• constVal1=-constVal1;• if(constVal2<0)• constVal2=-constVal2;• pImgSobelX[where]=constVal1+constVal2;• }•
![Page 32: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/32.jpg)
• min=(int)10e10;• max=(int)-10e10;• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• newValue=pImgSobelX[i*width+j];• if(newValue<min)• min=newValue;• if(newValue>max)• max=newValue;• }• }• //º¯È¯½Ã »ó¼ö°ªÀ» ¹Ì¸® °è»ê • constVal1=(float)(255.0/(max-min));• constVal2=(float)(-255.0*min/(max-min));• for(i=1; i<heightm1; i++)• {• for(j=1; j<widthm1; j++)• {• //[min,max]»çÀÌÀÇ °ªÀ» [0,255]°ªÀ¸·Î º¯È¯ • newValue=pImgSobelX[i*width+j];• newValue=constVal1*newValue+constVal2;• m_OutImg[i][j]=(BYTE)newValue;• }• }
• //µ¿Àû ÇÒ´ç ¸Þ¸ð¸® ÇØÁ¦• delete [] pImgSobelX;• delete [] pImgSobelY;• }
![Page 33: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/33.jpg)
Edge (Sobel)
![Page 34: Digital Image Processing Using Visual C++](https://reader035.vdocuments.us/reader035/viewer/2022062312/5528475b4a7959ee448b469c/html5/thumbnails/34.jpg)
Thank you….