06장화소영역ㅎㅎ처리 화소영역처리의개념 회선처리의원리 블러링 샤프닝 한빛미디어 ( 주 )
6 장. 화소영역처리 학습목표 영역처리의개념을이해한다. 회선처리를이용한영역처리를구현하는방법을학습한다. 블러링효과를이해하고프로그램을실습한다. 샤프닝효과를이해하고프로그램을실습한다. 2
Section 01 화소영역처리의개념화소영역처리 화소의원값이나위치를바탕으로화소값을변경하는화소의점처리과달리해당입력화소뿐만아니라그주위의화소값도함께고려하는공간영역연산회선기법 ( 또는컨벌루션기법, Convolution Technique) 으로수행하므로, 화소의영역처리를회선처리 (Convolution Processing) 또는컨벌루션처리라고함. 원시화소와이웃한각화소에가중치를곱한합을출력화소로생성 Output _ pixel [ x, y] x k y k m ( x k ) n ( y k ) I[ m, n] M[ m, n] Output_pixel[x, y]: 회선처리로출력한화소 I[m, n]: 입력영상의화소 M[m, n]: 입력영상의화소에대응하는가중치 3
화소영역처리의개념 ( 계속 ) 화소의영역기반처리 엠보싱 (Embossing) 효과, 블러링 (Blurring), 샤프닝 (Sharpening), 경계선검출 (Edge Detection), 잡음제거등의기술이있음. 4
엠보싱효과 입력영상을양각형태로보이게하는기술 5
블러링 영상의세밀한부분을제거하여영상을흐리게하거나부드럽게하는기술 영상의세밀한부분은주파수축에서보면고주파성분인데, 블러링은이고주파성분을제거해줌. 사용하는가중치의회선마스크는저역통과필터 (Low Pass Filter) 가됨 6
샤프닝 블러링과는반대로디지털영상에서상세한부분을더욱강조하여표현. 영상의상세한부분은고주파성분이므로영상에서저주파성분만제거하면샤프닝효과를얻을수있음 사용되는가중치의회선마스크는고역통과필터 (High Pass Filter) 가됨. 7
경계선검출 디지털영상의경계선을찾아내는기술 경계선은영상의밝기가낮은값에서높은값으로또는높은값에서낮은값으로변하는지점에있으므로입력한영상의정보가많이듦. 8
Section 02 회선처리의원리화소의영역처리 디지털영상처리시스템은선형시불변시스템 디지털영상처리의결과는컨벌루션또는회선기법으로얻을수있음회선기법으로생성되는새로운화소값 이웃한화소값과이에대응하는회선마스크의가중치를곱한뒤곱한값을더해서얻음. 가중치는작은행렬인회선마스크또는회선커널로구성됨. 디지털영상에서회선기법 가중치를포함한회선마스크가이동하면서수행 9
Section 02 회선처리의원리 10
회선수행방법 가중치를포함한회선마스크가이동하면서수행 회선마스크가영상의왼쪽위화소에서오른쪽으로한화소씩차례로이동하면서수행하여새로운화소를만들어냄. 한줄에서의회선수행이끝나면, 다음줄로이동하여다시한화소씩오른쪽으로이동하면서차례로수행됨. 11
회선의경계부분처리 회선의경계부분처리 화소의영역을처리하려면이웃화소가있어야하지만시작이나끝부분에는주변화소가없는것처럼회선마스크에대응할요소가없는영상의화소를처리하는방법을경계부분처리라고함. 0 삽입 회선마스크에대응되는빈영상의화소값을모두 0으로가정해서회선을수행하는방법 0으로설정해서영상의경계부분에서정확한회선처리가불가능하므로손실이발생함. 프로그램을단순하게구현할수있다는장점이있음. 12
회선의경계부분처리 ( 계속 ) 중첩부분에서만회선수행 회선마스크와영상이완전하게중첩되는위치에서회선을시작하도록하는방법회선마스크의크기가 3 3이면모든회선마스크의요소와영상의화소가중첩되는영상위치 (1, 1) 에서회선을시작함. 중첩부분에서회선수행이끝나면경계부분은입력영상과같은화소값을복사해서사용경계부분은회선처리가되지않아모든영역이회선처리된영상의새로운화소값을얻을수는없음. 13
회선의경계부분처리 ( 계속 ) 영상의크기를조정하여회선수행 영상의시작과끝부분이연결된것으로처리하는방법 영상이폐곡선을형성해영상의경계부분이빈영상의화소값을대신 입력영상의첫번째와두번째행의마지막열에있는화소, 마지막행의첫번째와두번째열에있는화소, 마지막으로대각선방향으로마지막행의마지막열의화소를복사해사용 14
회선마스크회선마스크의특징 주변화소의값을각방향에서대칭적으로고려해야함. 이것은각방향에있는같은수의이웃화소에기반을두고새로운화소값을생성하기때문회선마스크의크기는행과열모두홀수의크기를사용하여 3 3, 5 5, 7 7 등회선처리기법으로생성된출력영상은밝기에너지를보존해야하므로영상의평균밝기를원영상과똑같이유지해야함. 회선된영상의평균밝기값이원본영상과같도록많은회선마스크의계수합이 1이되도록함. 경계선검출등에서사용되는일부회선마스크에서는음수의계수를포함하며, 계수합이 0이되도록설계음의계수에서는음의화소값이생성될수도있으나밝기는항상양의값만있으므로생성된화소값에일정한상수 ( 최대밝기의 1/2) 를더해서양의화소값이나오도록함. 15
회선마스크 ( 계속 ) 16
회선마스크에따른회선처리예 회선마스크 ( 계속 ) 회선마스크에따른결과를간단히확인할수있도록 1 차원데이터에서 1 차원회선마스크를사용하여회선처리 17
엠보싱 회선처리를이용한가장기본적인영상처리방법 경계선검출기법에서사용되는회선마스크와같은회선마스크사용 적절하게구분된경계선으로영상이볼록한느낌을갖게됨 ( 구리판에양각한것같은효과 ) 가운데에있는계수가다른계수를상쇄시키도록구성해서경계선을검출. 이경계선에서양각한효과를얻을수있음. 마스크에는음의계수값 -1 이있으므로회선처리로생성된영상의화소값은음수 18
[ 실습하기 6-1] 엠보싱프로그램 1 ResourceView 창에서 [Menu]-[IDR_IMAGETYPE] 더블클릭 메뉴추가 2 [MFC ClassWizard] 대화상자를이용해추가된메뉴에서엠보싱처리를실행 하는함수추가 19
3 Doc Class OnEmbossing, OnMaskProcess, OnScale, Image2DMem 함수추가 [Add Member Variable] 대화상자에서 double** m_tempimage 변수선언 ➊ OnEmbossing 함수추가하기 [ 실습하기 6-1] 엠보싱프로그램 void CImageProcessingDoc::OnEmbossing() { int i, j; double EmboMask[3][3] = {{-1., 0., 0., {0., 0., 0., {0., 0., 1.; // 마스크선택 // double EmboMask[3][3] = {{0., 0., 0., {0., 1., 0., {0., 0., 0.; // double EmboMask[3][3] = {{1., 1., 1., {1., -8.,1., {1., 1., 1.; 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, EmboMask); // OnMaskProcess 함수를호출하여회선처리를한다. 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.; // 회선처리결과가 0~255 사이값이되도록한다. 20
➊ OnEmbossing 함수추가하기 ( 계속 ) [ 실습하기 6-1] 엠보싱프로그램 // m_tempimage = OnScale(m_tempImage, m_re_height, m_re_width); // 정규화함수를사용할때 // 회선처리결과나정규화처리결과는 2차원배열값이되므로 // 2차원배열을 1차원배열로바꾸어출력하도록한다. 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]; 21
➋ OnEmbossing 함수추가하기 [ 실습하기 6-1] 엠보싱프로그램 double** CImageProcessingDoc::OnMaskProcess(unsigned char *Target, double Mask[3][3]) { // 회선처리가일어나는함수 int i, j, n, m; double **tempinputimage, **tempoutputimage, S = 0.0; tempinputimage = Image2DMem(m_height + 2, m_width + 2); // 입력값을위한메모리할당 tempoutputimage = Image2DMem(m_height, m_width); // 출력값을위한메모리할당 // 1 차원입력영상의값을 2 차원배열에할당한다. for(i=0 ; i<m_height ; i++){ for(j=0 ; j<m_width ; j++){ tempinputimage[i+1][j+1] = (double)target[i * m_width + j]; // 회선연산 for(i=0 ; i<m_height ; i++){ for(j=0 ; j<m_width ; j++){ for(n=0 ; n<3 ; n++){ for(m=0 ; m<3 ; m++){ S += Mask[n][m] * tempinputimage[i+n][j+m]; // 회선마스크의크기만큼이동하면서값을누적 tempoutputimage[i][j] = S; // 누적된값을출력메모리에저장 S = 0.0; // 다음블록으로이동하면누적값을초기화 return tempoutputimage; // 결과값반환 22
➌ OnEmbossing 함수추가하기 [ 실습하기 6-1] 엠보싱프로그램 double** CImageProcessingDoc::OnScale(double **Target, int height, int width) { // 정규화를위한함수 int i, j; double min, max; min = max = Target[0][0]; for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ if(target[i][j] <= min) min = Target[i][j]; for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ if(target[i][j] >= max) max = Target[i][j]; max = max - min; for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ Target[i][j] = (Target[i][j] - min) * (255. / max); return Target; 23
➍ Image2DMem 함수추가하기 [ 실습하기 6-1] 엠보싱프로그램 double** CImageProcessingDoc::Image2DMem(int height, int width) { // 2차원메모리할당을위한함수 double** temp; int i, j; temp = new double *[height]; for(i=0 ; i<height ; i++){ temp[i] = new double [width]; for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ temp[i][j] = 0.0; // 할당된 2차원메모리를초기화 return temp; 24
4 View 클래스에다음프로그램추가 [ 실습하기 6-1] 엠보싱프로그램 void CImageProcessingView::OnEmbossing() { CImageProcessingDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->onembossing(); Invalidate(TRUE); 25
5 프로그램실행결과영상 [ 실습하기 6-1] 엠보싱프로그램 엠보싱처리기법을실제 8 비트그레이레벨영상에적용한예로음각과양각된것처럼느껴짐. 26
컬러영상의회선처리 컬러영상의회선처리 컬러영상은 R, G, B 채널세개를이용해다양한색을표현하므로이채널을응용하여회선처리수행독립채널별회선수행과 HSI 컬러모델로변경한뒤회선을처리하는두가지방법이있음 독립채널별회선수행 RGB 컬러영상을 R, G, B 채널로분리하여채널별로각각회선을수행한뒤회선처리된각채널을다시조합해서회선된컬러영상생성 RGB 컬러영상은채널세개를조합해서색을표현하므로회선과정에서아주작은오류만발생해도조합된회선에서정확한결과를만들지못함. 27
컬러영상의회선처리 ( 계속 ) HSI 컬러모델로변경후회선처리 RGB 컬러영상을우선으로해서 HSI 컬러모델로변환하여색상 (H), 명도 (I), 채도 (S) 성분을얻음밝기성분인명도 (I) 부분만회선처리를수행하고나머지두성분은수행하지않음. 마지막으로 HSI는다시 RGB 컬러영상으로변환됨. 색상 (H) 에서회선처리를하지않아원영상의색상부분이그대로보존되므로독립채널별로회선을처리하는방법보다더정확 28
컬러영상의회선처리 ( 계속 ) 29
블러링회선마스크 Section 03 블러링 블러링회선마스크는모든계수가양수로전체합은 1 디지털영상에서세세한부분은화소값이극단적인값에속함. 이극단적값을제거하는대표적인방법이바로평준화로, 평균값으로대체하는것 블러링회선마스크의계수는평균을구하는데사용되므로모두값이같음. 30
블러링회선마스크 ( 계속 ) 31
[ 실습하기 6-2] 블러링프로그램 1 ResourceView 창에서 [Menu]-[IDR_IMAGETYPE] 더블클릭 메뉴추가 2 [MFC ClassWizard] 대화상자를이용해추가된메뉴에서블러링처리를실행하는함수추가 3 Doc 클래스에다음프로그램추가 32
[ 실습하기 6-2] 블러링프로그램 void CImageProcessingDoc::OnBlurr() { int i, j; double BlurrMask[3][3] = {{1./9., 1./9., 1./9., {1./9., 1./9., 1./9., {1./9., 1./9., 1./9.; 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, BlurrMask); // 블러링처리 // 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]; 33
4 View 클래스에다음프로그램추가 [ 실습하기 6-2] 블러링프로그램 void CImageProcessingView::OnBlurr() { CImageProcessingDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->onblurr(); Invalidate(TRUE); 5 프로그램실행결과영상 엠보싱처리기법을실제 8 비트그레이레벨영상에적용한예로음각과양각된것처럼느껴짐. 34
가우시안스무딩필터링처리영상의세세한부분을제거하여부드럽게하므로스무딩 (Smoothing) 처리라고도함스무딩처리에사용되는대표적인저역통과필터로가우시안필터 (Gaussian Filter) 가있음이필터는수학적으로잘정의된가우시안함수에서얻음. G[ x, y] ( x 2 y 2 2 e 2 2 2 ) 35
σ 에따른가우시안함수그래프 가우시안스무딩필터링처리 ( 계속 ) σ 값이클수록높이는낮지만폭은넓어지므로많은저주파성분을통과시킴. σ 값이작을수록적은저주파성분만통과시킴. 가우시안필터 가우시안함수를표본화하여마스크의계수를결정오른쪽은 3 3 가우시안필터계수. 모든계수는양의값으로그합은 1 36
[ 실습하기 6-3] 가우시안필터처리프로그램 1 ResourceView 창에서 [Menu]-[IDR_IMAGETYPE] 더블클릭 메뉴추가 2 [MFC ClassWizard] 대화상자를이용해추가된메뉴에서가우시안필터처리 를실행하는함수추가 3 Doc 클래스에다음프로그램추가 37
[ 실습하기 6-3] 가우시안필터처리프로그램 void CImageProcessingDoc::OnGaussianFilter() { int i, j; double GaussianMask[3][3] = {{1./16., 1./8., 1./16., {1./8., 1./4., 1./8., {1./16., 1./8., 1./16.; 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, GaussianMask); // 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]; 38
[ 실습하기 6-3] 가우시안필터처리프로그램 4 View 클래스에다음프로그램추가 void CImageProcessingView::OnGaussianFilter() { CImageProcessingDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->ongaussianfilter(); Invalidate(TRUE); 39
5 프로그램실행결과영상 [ 실습하기 6-3] 가우시안필터처리프로그램 3 x 3 가우시안필터를이용한스무딩한영상으로, 전체적으로경계선이악화되어흐려짐. 40
Section 04 샤프닝 블러링과는반대되는효과를보이는기법을샤프닝 (sharpening) 또는영상강화라고함. 고주파에해당하는상세한부분을더욱강조하여대비효과를증가시킴 흐린영상을개선하여선명한영상을생성하는데주로사용됨. 41
샤프닝 ( 계속 ) 42
[ 실습하기 6-4] 샤프닝처리프로그램 1 ResourceView 창에서 [Menu]-[IDR_IMAGETYPE] 더블클릭 메뉴추가 2 [MFC ClassWizard] 대화상자를이용해추가된메뉴에서샤프닝처리를실행 하는함수추가 3 Doc 클래스에다음프로그램추가 43
[ 실습하기 6-4] 샤프닝처리프로그램 void CImageProcessingDoc::OnSharpening() { int i, j; //double SharpeningMask[3][3] = {{-1., -1., -1., {-1., 9., -1., {-1., -1., -1.; double SharpeningMask[3][3] = {{0., -1., 0., {-1., 5., -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, SharpeningMask); // 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]; 44
[ 실습하기 6-4] 샤프닝처리프로그램 4 View 클래스에다음프로그램추가 void CImageProcessingView::OnSharpening() { CImageProcessingDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->onsharpening(); Invalidate(TRUE); 5 프로그램실행결과영상 적용마스크에따라경계부분이강조된정도가다르게나타남. 마스크 1 을적용한 (b) 보다마스크 2 를적용한 (c) 가더욱강조되었음. 45
고주파통과필터를이용한샤프닝처리 고주파필터는영상신호성분중고주파성분은통과시키고저주파성분은차단 필터계수의합은 0 으로샤프닝회선마스크하고는다르나, 나머지동작특성은같음. 가운데큰양수값과주변의작은음수값으로마스크되어경계선을더욱두드러지게함. 다음은대표적인고주파필터의계수 46
[ 실습하기 6-5] 고주파필터샤프닝처리프로그램 1 ResourceView 창에서 [Menu]-[IDR_IMAGETYPE] 더블클릭 메뉴추가 2 [MFC ClassWizard] 대화상자를이용해추가된메뉴에서고주판필터샤프닝 처리를실행하는함수추가 3 Doc 클래스에다음프로그램추가 47
[ 실습하기 6-5] 고주파필터샤프닝처리프로그램 void CImageProcessingDoc::OnHpfSharp() { int i, j; double HpfSharpMask[3][3] = {{-1./9., -1./9., -1./9., {-1./9., 8./9., -1./9., {-1./9., -1./9., -1./9.; 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, HpfSharpMask); // 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]; 48
[ 실습하기 6-5] 고주파필터샤프닝처리프로그램 4 View 클래스에다음프로그램추가 void CImageProcessingView::OnHpfSharp() { CImageProcessingDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->onhpfsharp(); Invalidate(TRUE); 49
5 프로그램실행결과영상 [ 실습하기 6-5] 고주파필터샤프닝처리프로그램 샤프닝회선마스크로샤프닝된영상과비교하면더많은저주파성분이제거되어단지경계부분만확인할수있음. 50
저주파통과필터를이용한샤프닝처리 고주파통과필터를통과한결과영상은저주파통과필터를활용하여얻을수도있음. 원본영상에서저주파통과필터를통과한결과영상을뺄셈하여얻는데, 이를언샤프마스킹 (Unsharp Masking) 이라고함. Unsharp Masking = ( 원영상 ) ( 저주파통과필터링결과영상 ) 고주파통과필터는세부정보를강조하지만영상에서중요한부분에해당하는낮은공간주파수성분이손실됨. 고주파지원 (High-Boost) 필터는저주파영역에서손실한양에해당하는일정량의이득을주어저주파성분의손실을어느정도보상받을수있음. 원본영상의밝기를증가시킨뒤저주파영상을뺄셈하는방법을이용하여처리 High-Boost = α( 원영상 ) ( 저주파통과필터링결과영상 ) 51
[ 실습하기 6-6] 저주파필터샤프닝처리프로그램 1 ResourceView 창에서 [Menu]-[IDR_IMAGETYPE] 더블클릭 메뉴추가 2 [MFC ClassWizard] 대화상자를이용해추가된메뉴에서저주파필터샤프닝 처리를실행하는함수추가 3 Doc 클래스에다음프로그램추가. 저주파필터샤프닝처리에서는이전에추가한 ConstantDlg 대화상자를이용하여 alpha 값을입력받음. 52
[ 실습하기 6-6] 저주파필터샤프닝처리프로그램 void CImageProcessingDoc::OnLpfSharp() { CConstantDlg dlg; // 상수를입력받으려고대화상자선언 int i, j, alpha; double LpfSharpMask[3][3] = {{1./9., 1./9., 1./9., {1./9., 1./9., 1./9., {1./9., 1./9., 1./9.; 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]; if(dlg.domodal() == IDOK){ alpha = (int)dlg.m_constant; // 대화상자를이용하여상수를입력받는다. m_tempimage = OnMaskProcess(m_InputImage, LpfSharpMask); for(i=0 ; i<m_height ; i++){ for(j=0 ; j<m_width ; j++){ m_tempimage[i][j] = (alpha * m_inputimage [i*m_width + j]) - (unsigned char) m_tempimage[i][j]; 53
[ 실습하기 6-6] 저주파필터샤프닝처리프로그램 // 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]; 54
[ 실습하기 6-6] 저주파필터샤프닝처리프로그램 4 View 클래스에다음프로그램추가 void CImageProcessingView::OnLpfSharp() { CImageProcessingDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->onlpfsharp(); Invalidate(TRUE); 55
5 프로그램실행결과영상 [ 실습하기 6-6] 저주파필터샤프닝처리프로그램 Unsharp Mask 로처리된 (b) 는고주파통과필터를직접사용한것과같은효과. 고주파지원으로처리된 (c) 는샤프닝회선마스크를이용한것과결과가비슷 56
화소의영역처리 요약 출력영상의새로운화소값을결정하려고해당입력화소뿐만아니라그주변의화소도함께고려하는공간영역연산 회선기법 ( 처리 ) 또는컨벌루션처리라고도함. 회선기법 주변화소의조합을결정하여새로운화소를출력해줌. 원시화소에이웃한각화소에가중치를곱한합을출력화소로생성 화소의영역기반처리 엠보싱효과, 블러링, 샤프닝, 경계선검출, 잡음제거등이있음 엠보싱효과 블러링 입력영상을양각형태로나타냄 = 영상의특정부분이볼록해보이도록만듦. 영상의세밀한부분을제거하여영상을흐리게하거나부드럽게나타내는기술. 고주파성분을제거하는기술 ( 영상의세밀한부분은고주파성분 ). 경계선검출 디지털영상에있는경계선 (Edge) 을찾아내는기법 57
요약 화소의영역처리를수행하는디지털영상처리시스템은선형시불변시스템을만족시킴 디지털영상처리의결과는컨벌루션또는회선처리로얻을수있음 회선기법으로생성되는새로운화소값 이웃화소값과이에대응하는회선마스크의가중치를곱한뒤곱한값을더해서얻음. 여기서가중치는작은행렬인회선마스크또는회선커널로구성됨. 디지털영상에서화소의영역처리를수행하는회선기법 가중치를포함한회선마스크가이동하면서수행 경계부분처리 회선마스크에대응할요소가없는영상의화소를처리하는방법 영상에서의주파수개념은화소값의변화율을나타냄. 블러링처리나스무딩처리를하려고영상처리에서사용하는대표적인저역통과필터로가우시안필터가있음. 58
Thank you