07 영역처리를장ㅎㅎ이용한에지검출 에지검출의개요 에지검출기 1차미분을이용한에지검출 2차미분을이용한에지검출 한빛미디어 ( 주 )
7 장. 영역처리를이용한에지검출 학습목표 에지의개념을학습한다. 이동과차분을기본으로한에지검출기를학습한다. 미분과에지의관련성을소개한다. 1차미분회선마스크를이용한에지검출기를학습한다. 2차미분회선마스크를이용한에지검출기를학습한다. 2
에지 (edge) Section 01 에지검출의개요 디지털영상의밝기가낮은값에서높은값으로또는높은값에서낮은값으로변하는지점 디지털영상을구성하는객체간의경계 (= 경계선 ) 디지털영상의에지 : 물체식별, 위치 / 모양 / 크기등을인지하고방향성을탐지할수있는정보제공 3
영역처리 에지검출의개요 ( 계속 ) 에지를검출하기위한방법으로사용됨 간단한에지추출기법 연산자체가간단하고빠름. 유사연산자 (Homogeneity Operator) 와차연산자 (Difference Operator) 가있음. 이두방법으로얻은에지를강화하거나약화시키는추가적인임계값 (Threshold) 을처리하는방법이있음. 미분을이용한에지검출방법 에지가화소의밝기변화율에관여한다는것 1 차미분을이용한검출방법과 2 차미분을이용한검출방법있음 2 차미분을이용한검출방법 : 1 차미분으로얻은결과에미분을한번더추가하여에지검출의성능을향상시킨것 4
에지검출의개요 ( 계속 ) 5
Section 02 에지검출기 디지털영상의에지를검출하는가장쉬운방법은화소간의차이를이용하는것 이동과차분 (Shift And Difference) 화소의위치를위쪽, 아래쪽, 왼쪽, 오른쪽으로하나씩이동시킨뒤원래화소에서이동위치의화소를빼서에지를구함. 에지검출기는대부분이방법을응용함. 6
[ 실습하기 7-1] 이동과차분처리프로그램 1 ResourceView 창에서 [Menu]-[IDR_IMAGETYPE] 더블클릭 메뉴추가 2 [MFC ClassWizard] 대화상자를이용해추가된메뉴에서이동과차분처리를실행하는함수추가 3 Doc 클래스에다음프로그램추가 7
[ 실습하기 7-1] 이동과차분처리프로그램 void CImageProcessingDoc::OnDiffOperatorHor() { int i, j; double DiffHorMask[3][3] = {{0., -1., 0.}, {0., 1., 0.}, {0., 0., 0.}}; // 수평필터선택 m_re_height = m_height; m_re_width = m_width; m_re_size = m_re_height * m_re_width; m_outputimage = new unsigned char [m_re_size]; m_tempimage = OnMaskProcess(m_InputImage, DiffHorMask); // m_tempimage = OnScale(m_tempImage, m_re_height, m_re_width); 8
[ 실습하기 7-1] 이동과차분처리프로그램 for(i=0 ; i< m_re_height ; i++){ for(j=0 ; j< m_re_width ; j++){ if(m_tempimage[i][j] > 255.) m_tempimage[i][j] = 255.; if(m_tempimage[i][j] < 0.) m_tempimage[i][j] = 0.; } } } for(i=0 ; i< m_re_height ; i++){ for(j=0 ; j< m_re_width ; j++){ m_outputimage[i* m_re_width + j] = (unsigned char)m_tempimage[i][j]; } } 9
[ 실습하기 7-1] 이동과차분처리프로그램 4 View 클래스에다음프로그램추가 void CImageProcessingView::OnDiffOperatorHor() { CImageProcessingDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->ondiffoperatorhor(); } Invalidate(TRUE); 10
유사연산자기법 가장단순한에지검출방법으로화소를감산한값에서최대값을결정하여에지를검출 뺄셈연산이여러번수행되므로계산시간이많이소요됨 11
[ 실습하기 7-2] 유사연산자에지검출처리프로그램 1 ResourceView 창에서 [Menu]-[IDR_IMAGETYPE] 더블클릭 메뉴추가 2 [MFC ClassWizard] 대화상자를이용해추가된메뉴에서유사연산자에지검출처리를실행하는함수추가 3 Doc 클래스에다음프로그램추가 12
[ 실습하기 7-2] 유사연산자에지검출처리프로그램 ➊ OnHomogenOperator 함수추가하기 void CImageProcessingDoc::OnHomogenOperator() { int i, j, n, m; double max, **tempoutputimage; m_re_height = m_height; m_re_width = m_width; m_re_size = m_re_height * m_re_width; m_outputimage = new unsigned char [m_re_size]; m_tempimage = Image2DMem(m_height + 2, m_width + 2); tempoutputimage = Image2DMem(m_Re_height, m_re_width); for(i=0 ; i<m_height ; i++){ for(j=0 ; j<m_width ; j++){ m_tempimage[i+1][j+1] = (double)m_inputimage[i * m_width + j]; } } 13
[ 실습하기 7-2] 유사연산자에지검출처리프로그램 ➊ OnHomogenOperator 함수추가하기 ( 계속 ) for(i=0 ; i<m_height ; i++){ for(j=0 ; j<m_width ; j++){ max = 0.0; // 블록이이동할때마다최대값초기화 for(n=0 ; n<3 ; n++){ for(m=0 ; m<3 ; m++){ if(doubleabs(m_tempimage[i+1][j+1] - m_tempimage[i+n][j+m]) >= max) // 블록의가운데값 - 블록의주변픽셀값의절대값 // 중에서최대값을찾는다. } } max = DoubleABS(m_tempImage[i+1] [j+1] - m_tempimage[i+n][j+m]); } } tempoutputimage[i][j] = max; // 찾은최대값을출력값으로지정 14
[ 실습하기 7-2] 유사연산자에지검출처리프로그램 ➊ OnHomogenOperator 함수추가하기 ( 계속 ) for(i=0 ; i< m_re_height ; i++){ for(j=0 ; j< m_re_width ; j++){ if(tempoutputimage[i][j] > 255.) tempoutputimage[i][j] = 255.; if(tempoutputimage[i][j] < 0.) tempoutputimage[i][j] = 0.; } } } for(i=0 ; i< m_re_height ; i++){ for(j=0 ; j< m_re_width ; j++){ m_outputimage[i* m_re_width + j] = (unsigned char)tempoutputimage[i][j]; } } 15
[ 실습하기 7-2] 유사연산자에지검출처리프로그램 ➋ DoubleABS 함수추가하기 double CImageProcessingDoc::DoubleABS(double X) { // 실수의절대값연산함수 if(x >= 0) return X; else return -X; } 16
[ 실습하기 7-2] 유사연산자에지검출처리프로그램 4 View 클래스에다음프로그램추가 void CImageProcessingView::OnHomogenOperator() { CImageProcessingDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->onhomogenoperator(); } Invalidate(TRUE); 17
[ 실습하기 7-2] 유사연산자에지검출처리프로그램 5 프로그램실행결과영상 18
차연산자기법 유사연산자의계산시간이오래걸리는단점을보안해주는방법 뺄셈연산이여덟번필요한유사연산자와는달리화소당네번만사용되어연산시간이빠름. 19
차연산자기법 ( 계속 ) 20
임계값을이용한에지처리 보통에지추출기와함께사용되어강한에지는강하게, 약한에지를약화게함. 효율적으로영상처리를하기위해서는검출된에지를강조하거나약화시킬필요가있음. 21
Section 03 1 차미분을이용한에지검출 디지털영상의에지는화소의밝기값이급격히변하는부분이므로, 이변화부분을탐지하는연산을이용해에지검출 에지추출에는함수의변화분을찾는미분연산이이용됨. 22
1 차미분을이용한에지검출 ( 계속 ) 좌표 (x, y) 에서각방향으로의편미분 이웃데이터와의차이값으로표현되므로, 디지털영상의미분은각방향의변화율을나타냄. Hr 는행검출기, Hc 는열검출기 23
영상의전체변화분의크기계산 1 차미분을이용한에지검출 ( 계속 ) 에지검출을위한 1차미분연산을영역처리기법의회선처리로수행하려면행검출기 Hr과열검출기 Hc를회선마스크로생성편미분식에서제시된이웃데이터와의차이를표현하는회선마스크를얻을수얻음. 얻은 1차미분회선마스크는이동과차분의회선마스크와형태가비슷함. 마스크의크기가클수록상세한에지를검출하기어렵고, 작으면잡음에민감하며, 회선마스크의합은 0이됨 24
1 차미분을이용한에지검출 ( 계속 ) 25
종류가다양함. 1 차미분회선마스크의종류 로버츠 (Roberts), 소벨 (Sobel), 프리윗 (Prewitt) 마스크가대표적 행검출마스크와열검출마스크가있으며, 각회선마스크는고유한특징이있음. 26
로버츠마스크 장점 : 크기가작아매우빠른속도로동작하여효과적으로사용가능. 단점 : 돌출된값을잘평균할수없으며, 잡음에민감함. 27
프리윗마스크 장점 : 돌출된값을비교적잘평균화함. 단점 : 대각선보다수평과수직에놓인에지에더민감하게반응함. 28
소벨마스크 장점 : 돌출된값을비교적잘평균화함. 단점 : 대각선방향에놓인에지에더민감하게반응함. 29
Compass Gradient Operator 에지를좀더정확하게검출하려고각기다른방향의마스크여덟개를이용하여에지를검출하는방법 여덟방향으로수행한연산의결과중최대값을최종출력으로결정함. 단점 마스크의크기가작을수록잡음에민감하고, 클수록상세한에지를검출할수없음. 30
Section 04 2 차미분을이용한에지검출 임의의이산함수 f(x) 에서의 1 차미분과 2 차미분결과 2 차미분을이용한에지검출기는미분을한번더수행하므로, 1 차미분의단점을완화시켜둔감하게반응하도록만듦. 1 차미분을이용한에지검출기의단점 : 에지가있는영역을지날때민감하게반응 2 차미분을이용한에지검출기의장점과단점 장점 : 검출된에지를끊거나하지않고연결된폐곡선을형성함. 단점 : 고립된잡음에민감하고, 윤곽의강도만검출하지방향은구하지못함. 31
2 차미분을이용한에지검출 ( 계속 ) 2 차미분연산은에지부분에서부호가바뀌는영교차 (Zero Crossing) 의특성이있음. 32
라플라시안 (Laplacian) 연산자 대표적인 2 차미분연산자로, 모든방향의에지를강조함. 라플라시안연산자공식 33
라플라시안 (Laplacian) 연산자 ( 계속 ) 1 차미분의회선마스크에는행과열방향의회선마스크가있으나, 2 차미분의라플라시안회선마스크에는행과열방향이합쳐져한개만있음. 회선마스크의합은 0 34
[ 실습하기 7-3] 라플라시안처리프로그램 1 ResourceView 창에서 [Menu]-[IDR_IMAGETYPE] 더블클릭 메뉴추가 2 [MFC ClassWizard] 대화상자를이용해추가된메뉴에서라플라시안처리를실행하는함수추가 3 Doc 클래스에다음프로그램추가 35
[ 실습하기 7-3] 라플라시안처리프로그램 void CImageProcessingDoc::OnLaplacian() { int i, j; double LaplacianMask[3][3] = {{0., 1., 0.}, {1., -4., 1.}, {0., 1., 0.}}; m_re_height = m_height; m_re_width = m_width; m_re_size = m_re_height * m_re_width; m_outputimage = new unsigned char [m_re_size]; m_tempimage = OnMaskProcess(m_InputImage, LaplacianMask); // m_tempimage = OnScale(m_tempImage, m_re_height, m_re_width); for(i=0 ; i< m_re_height ; i++){ for(j=0 ; j< m_re_width ; j++){ if(m_tempimage[i][j] > 255.) m_tempimage[i][j] = 255.; if(m_tempimage[i][j] < 0.) m_tempimage[i][j] = 0.; } } } for(i=0 ; i< m_re_height ; i++){ for(j=0 ; j< m_re_width ; j++){ m_outputimage[i* m_re_width + j] = (unsigned char)m_tempimage[i][j]; } } 36
[ 실습하기 7-3] 라플라시안처리프로그램 4 View 클래스에다음프로그램추가 void CImageProcessingView::OnLaplacian() { CImageProcessingDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->onlaplacian(); } Invalidate(TRUE); 37
5 프로그램실행결과영상 [ 실습하기 7-3] 라플라시안처리프로그램 잡음성분에매우민감하여실제보다더많은에지를검출하므로에지의크기를서로비교하여임계값이상일때만에지로정의 38
LoG(Laplacian of Gaussian) 연산자잡음에매우민감한라플라시안마스크를이용한에지검출기의문제점을해결하기위해만듦. 가우시안스무딩을수행하여잡음제거과정을거친뒤에지를강조하려고라플라시안을이용함. LoG 연산자공식 39
LoG(Laplacian of Gaussian) 연산자 ( 계속 ) 40
LoG(Laplacian of Gaussian) 연산자 ( 계속 ) LoG 를수행하는두가지방법 가우시안스무딩필터링을먼저수행하고그결과값에라플라시안을수행하는방법 LoG 필터에해당하는선형필터링을한꺼번에수행하는방법 41
DoG(Difference of Gaussians) 연산자 계산시간이많이소요되는 LoG 연산자의단점을보안하기위해등장 각가우시안연산에분산값을서로다르게주어이차를이용해에지맵을구함 DoG 공식 DoG( x, y) ( x 2 y 2 2 1 e 2 2 2 1 ) ( x 2 y 2 2 2 e 2 2 2 2 ) 장점 σ1 과 σ2 의값을변화시켜검출할에지의넓이를조절할수있음. σ1 /σ2=1.6 의값이있는비율이 LoG 와가장비슷한결과를나타냄. 42
DoG(Difference of Gaussians) 연산자 ( 계속 ) 43
DoG(Difference of Gaussians) 연산자 ( 계속 ) 44
컬러영상에서의에지검출 RGB 컬러모델을사용할경우 R, G, B 각각에서에지검출을위한회선을수행후검출된에지를다시합해컬러영상의에지를얻음. 검출된각성분의에지를합치는공식 E( x, y) E 2 red ( x, y) E 2 green ( x, y) E 2 blue ( x, y) HSI 컬러모델을사용할경우 RGB 컬러모델을 HSI 컬러모델로변환하여명도값 (I) 에서만회선을적용한뒤 RGB 컬러모델로변경하여컬러영상의에지를얻음. 45
컬러영상에서의에지검출 ( 계속 ) 46
에지 요약 디지털영상의밝기가낮은값에서높은값으로또는높은값에서낮은값으로변하는지점 (= 경계선 ) 간단한에지추출기법 연산자체가간단하고빠름. 유사연산자와차연산자, 임계값처리방법이대표적 유사연산자 차연산자 가장단순한방법으로, 일련의화소를감산한값에서최대값을결정하여에지를검출 계산시간이오래걸리는유사연산자의단점해결위해제시 화소당뺄셈연산이네개만사용되어서빠른연산수행가능 임계값을이용한에지처리 보통에지추출기와함께사용되어강한에지는강하게, 약한에지는약화시키는역할수행 1 차미분회선마스크 종류가다양 로버츠, 소벨, 프리윗마스크가대표적 47
Compass Gradient Operator 요약 에지를좀더정확하게검출하려고다른방향의마스크여덟개를이용하여에지를검출하는방법 2 차미분에지검출기 라플라시안, LoG, DoG 등이대표적 라플라시안에지검출기 LoG LoG 에지검출성능이우수하여다른연산자보다더욱더두드러지게에지추출 에지의방향은검출하지못하고, 잡음성분에매우민감하여실제보다많은에지를검출. 잡음에민감한라플라시안의문제를해결하기위해만듦. 라플라시안을적용하기전에가우시안스무딩을수행하여잡음을제거한뒤에지를강조하는데라플라시안을이용 계산시간이많이소요됨. 계산시간이많이소요되는 LoG 의단점보완위해등장 48
요약 컬러영상에서의에지검출 RGB 컬러모델사용시 : R, G,B 각각에서에지검출을위한회선을수행 검출된에지를다시합침. HSI 컬러모델사용시 : RGB 모델을 HSI 모델로변환하여명도값 (I) 에만회선을적용 RGB 모델로변경해서컬러영상의에지를구함. 49
Thank you