19) cvsmooth 저주파통과필터링은일반적으로처리할영상성분중에화소값의변화율이낮은저주파성분은통과시키고, 화소값의변화율이큰고주파성분을차단시키는것을가리킨다. 저주파통과필터링을수행한영상은윤곽선부분을이루는고주파성분이제거되어전체영상이부드러워지게되는데이현상을가리켜블러링 (blurring) 이라한다. 잡음 (noise) 를제거하는것이가능하지만, 영상이부드러워지고희미해지기때문에영상대비가악화된다는단점이있다. 이를위한함수인 cvsmooth는기본블러링 (simple blurring), 가우시안블러링 (Gaussian blurring), 중간값블러링 (median blurring), 바이래터럴스무딩 (bilateral smoothing) 등의네가지블러링기능을제공한다. 사용방법은 (cvsmooth AllocImage type mask_width mask_height) 로 AllocImage는 cvloadimage 함수를이용하여받은리턴값을이용하고 type은 BLUR_NO_SCALE, BLUR, GAUSSIAN, MEDIAN, BILATERAL이있다. mask_width는마스크의너비, mask_height는 mask의높이를나타낸다. (set 'lena (cvloadimage 'images\lena.jpg)) (set 'smooth (cvsmooth lena GAUSSIAN 3 3)) (set 'smooth (cvsmooth smooth GAUSSIAN 3 3)) (set 'smooth (cvsmooth smooth GAUSSIAN 3 3)) (cvshowimage smooth 'result) (cvreleaseimage smooth) (cvreleaseimage lena) 그림 1. cvsmooth 20) cvwavelet 웨이블릿이란이미지압축에사용되고신호처리할수있는알고리즘이다. 구현한알고리즘은하 (haar) 웨이블릿알고리즘을이용하여구현하였다. 하웨이블릿알고리즘을자세히알고싶은부분이 있다면다음사이트 (http://dmr.ath.cx/gfx/haar/) 를참조바란다.
사용방법은 (cvwavelet GrayScaleImage method) 로 GrayScaleImage 는 cvcvtcolor 함수를이 용하여 Gray 영상으로변환한리턴값을이용한다. method 는웨이블릿에사용할알고리즘을말하는데 하웨이블릿만구현되어있으므로 0 을입력한다. (set 'baboon (cvloadimage 'images\baboon.jpg)) (set 'gray (cvcvtcolor baboon RGB2GRAY 1)) (set 'wavelet (cvwavelet baboon 0)) (cvshowimage wavelet 'result) (cvreleaseimage wavelet) (cvreleaseimage gray) (cvreleaseimage baboon) 21) cvsetimageroi cvsetimageroi의 ROI는 Region Of Interest의약자로입력받은이미지에서일정한영역을선택한다. 사용방법은 '(cvsetimageroi AllocImage startx starty width height)' 로 AllocImage는 cvloadimage 함수를이용하여받은리턴값을이용하고 startx, starty는시작좌표를의미하고, width, height는시작좌표로부터가로길이, 세로길이를의미한다. (set 'airplane (cvloadimage 'images\airplane.jpg)) (set 'roi (cvsetimageroi airplane 100 100 300 300)) (cvshowimage roi 'result) (cvreleaseimage roi) (cvreleaseimage airplane) 22) cvresize 특정한보간법에의해영상의크기를조절한다. 사용방법은 '(cvresize AllocImage interpolation scale)' 로 AllocImage는 cvloadimage 함수를이용하여받은리턴값을이용하고 interpolation은보간법상수로최근접이웃보간법 (INTER_NN), 양선형보간법 (INTER_LINEAR), 재샘플링 (INTER_AREA), 고등차수보간법 (INTER_CUBIC) 을선택하여입력하고 scale은확대 / 축소값이다.
(set 'airplane (cvloadimage 'images\airplane.jpg)) (set 'resize (cvresize airplane INTER_NN 2)) (cvshowimage resize 'result) (cvreleaseimage resize) (cvreleaseimage airplane) 23) cvrotation 회전 (Rotation) 은원영상을원하는각도만큼변환하는것을가리킨다. 사용방법은 '(cvrotation GrayScaleImage centerx centery angle)' 로 GrayScaleImage는명암도레벨의영상을입력하고 centerx와 centery는이미지영역의좌표를나타내며이좌표를기준으로 angle의각도값만큼회전하게된다. (set 'airplane (cvloadimage 'images\airplane.jpg)) (set 'gray (cvcvtcolor airplane RGB2GRAY 1)) (set 'width (cvgetimagelength gray 'width)) (set 'height (cvgetimagelength gray 'height)) (set 'rotation (cvrotation gray (/ width 2) (/ height 2) 45)) (cvshowimage rotation 'result) (cvreleaseimage rotation) (cvreleaseimage gray) (cvreleaseimage airplane) 그림 2. 회전 (Rotation)
24) cvreflect 반사 (Reflect) 는회전과거의비슷한효과를가진다. 상하뒤집기인플립 (flip), 좌우뒤집기인거울효과 (mirroring effect) 를낼수있다. 사용방법은 '(cvreflect AllocImage flipmode)' 로 AllocImage 는 cvloadimage 함수를이용하여받은리턴값을이용하고 flipmode는플립 (REFL_FLIP), 거울 (REFL_MIRROR), 플립 + 거울 (REFL_FLIP_MIRROR) 효과을선택하여입력한다. (set 'airplane (cvloadimage 'airplane.jpg)) (set 'reflect (cvreflect airplane REFL_FLIP)) (cvshowimage reflect 'result) (cvreleaseimage reflect) (cvreleaseimage airplane) 그림 3. Original Image 그림 4. 거울 (REFL_MIRROR)
그림 5. 플립 (REFL_FLIP) 그림 6. 플립 + 거울 (REFL_FLIP_MIRROR) 25) cvtranslate 이동 (translate) 은영상의시작화소인좌표 (startx, starty) 에서부터끝화소인좌표 (endx, endy) 를 widthlength, heightlength만큼영상을옮기는것이다. 상하뒤집기인플립 (flip), 좌우뒤집기인거울효과 (mirroring effect) 를낼수있다. 사용방법은 '(cvtranslate GraySacleImage startx starty endx endy widthlength heightlength)' 로 GrayScaleImage는명암도레벨의영상을입력하고 startx, starty는사각형의왼쪽상위시작좌표를의미하고, endx, endy는사각형의오른쪽하위끝좌표를의미한다. 이좌표를이용한사각형만큼 widthlength가양수이면오른쪽, 음수이면왼쪽으로이동하고 heightlength가양수이면아래, 음수이면위로이동한다.
(set 'airplane (cvloadimage 'images\airplane.jpg)) (set 'gray (cvcvtcolor airplane RGB2GRAY 1)) (set 'width (cvgetimagelength gray 'width)) (set 'height (cvgetimagelength gray 'height)) (set 'translate (cvtranslate gray 0 0 (/ width 2) (/ height 2) (/ width 2) 0)) (cvshowimage translate 'result1) (cvreleaseimage translate) (set 'translate (cvtranslate gray 0 0 (/ width 2) (/ height 2) 0 (/ height 2))) (cvshowimage translate 'result2) (cvreleaseimage translate) (set 'translate (cvtranslate gray 0 0 (/ width 2) (/ height 2) (/ width 2) (/ height 2))) (cvshowimage translate 'result3) (cvreleaseimage translate) (cvreleaseimage gray) (cvreleaseimage airplane) 그림 7. Original Image 그림 8. 첫번째연산
그림 9. 두번째연산 그림 10. 세번째연산 26) cvmatchtemplate 템플릿매칭은템플릿영상 (AllocImage2) 과입력영상 (AllocImage1) 을비교하여유사한부분을찾는다. 이를위해 cvmatchtempate 함수를이용한다. 사용방법은 (cvmatchtemplate AllocImage1 AllocImage2 templatemethod) 로 AllocImage1, AllocImage2는 cvloadimage 함수를이용하여받은리턴값을이용한다. templatemethod는매칭시킬방법을말한다. cvmatchtemplate의리턴값은 Point 값으로매칭된사각형의왼쪽상위좌표값이리턴된다. (set 'a (cvloadimage 'images\baboon.jpg)) (set 'b (cvloadimage 'images\babooneyes.jpg)) (set 'c (cvmatchtemplate a b TM_CCORR_NORMED)) (cvreleaseimage a) (cvreleaseimage b) 3.3. 객체를대상으로하는처리 1) cvdrawcircle 영상에서원을그리고싶을때 cvdrawcircle 함수를이용한다. 사용방법은 (cvdrawcircle AllocImage middlepointx middlepointy size cvsetrgb thickness) 로 AllocImage는 cvloadimage 함수를이용하여받은리턴값을이용한다. 단, 3차원영상만을입력받아야한다. middlepointx와 middlepointy는원의중점좌표를입력한다. size는원의크기를말하고 cvsetrgb는 cvsetrgb 함수를이용한리턴값을이용하고 thickness는원의선굵기를입력한다.
(set 'airplane (cvloadimage 'images\airplane.jpg)) (set 'blue (cvsetrgb 0 0 255)) (cvdrawcircle airplane 200 200 50 blue 3) (cvshowimage airplane 'result) (cvreleaseimage airplane) 그림 11. cvdrawcircle 2) cvdrawline 영상에서선을그리고싶을때 cvdrawline 함수를이용한다. 사용방법은 (cvdrawline AllocImage leftx lefty rightx righty cvsetrgb thickness) 로 AllocImage는 cvloadimage 함수를이용하여받은리턴값을이용한다. 단, 3차원영상만을입력받아야한다. leftx와 lefty는선의왼쪽좌표를입력하고, rightx와 righty는선의오른쪽좌표를입력한다. cvsetrgb는 cvsetrgb 함수를이용한리턴값을이용하고 thickness는사각형선의굵기를입력한다. (set 'airplane (cvloadimage 'images\airplane.jpg)) (set 'blue (cvsetrgb 0 0 255)) (cvdrawline airplane 30 30 200 200 blue 3) (cvshowimage airplane 'result) (cvreleaseimage airplane)
그림 12. cvdrawline 3) cvlabeling cvlabeling 함수는이진화된영상에서레이블링 (labeling) 하기위한함수이다. 레이블링이란인접한화소에모두같은번호 (label) 를붙이고연결되지않은다른성분에는다른번호를붙이는것이다. 사용방법은 (cvlabeling BinaryImage thresholdpixelnumber thresholdpixelvalue number) 로 BinaryImage는 cvthreshold 함수를이용하여받은리턴값을이용한다. 즉, 이진화된영상만을입력받아야한다. thresholdpixelnumber는최소픽셀의개수를의미한다. thresholdpixelvalue는해당값과같은픽셀을찾아레이블링시킨다. number는인자값 0, 1만을사용하며 0을입력하면사각형구조체들을리턴하고, 1를입력하면찾은총개수를리턴한다. (set 'baboon (cvloadimage 'images\baboon.jpg)) (set 'gray (cvcvtcolor baboon RGB2GRAY 1)) (set 'thre (cvthreshold gray 200 THRESH_BINARY)) (set 'rects (cvlabeling thre 200 255 0)) (set 'x1 (cvgetrect rects 0 'x)) (set 'y1 (cvgetrect rects 0 'y)) (set 'w1 (cvgetrect rects 0 'width)) (set 'h1 (cvgetrect rects 0 'height)) (set 'blue (cvsetrgb 0 0 255)) (cvdrawrect baboon x1 y1 (+ x1 w1) (+ y1 h1) blue 2) (cvshowimage baboon 'result) (cvreleaseimage thre) (cvreleaseimage gray) (cvreleaseimage baboon)
4) cvcolorlabeling cvcolorlabeling 함수는 3차원영상에서레이블링 (labeling) 하기위한함수이다. 레이블링이란인접한화소에모두같은번호 (label) 를붙이고연결되지않은다른성분에는다른번호를붙이는것이다. 사용방법은 (cvcolorlabeling ColorImage MinPixelThreshold MaxPixelThreshold MinPixelValue MaxPixelValue number) 로 ColorImage는 3차원이미지를이용한다. 즉, RGB, YCrCb 영상등을이용할수있다. MinPixelThreshold는최소픽셀의개수를의미하고, MaxPixelThreshold는최대픽셀의개수를의미한다. MinPixelValue는해당픽셀값의최소픽셀을의미하고, MaxPixelValue는해당픽셀값의최대픽셀을의미하여그값에해당하는픽셀을찾아레이블링시킨다. number는인자값 0, 1, 2, 3를사용하며 0을입력하면사각형구조체들을리턴하고, 1 를입력하면찾은총개수를리턴한다. 2을입력하면 1차원레이블링영역이생성되고, 3를입력하면 3차원레이블링영역이생성된다. (set 'baboon (cvloadimage 'images\baboon.jpg)) (set 'boundary (cvcolorlabeling baboon 300 4000 100 150 3)) (cvshowimage boundary 'result) (cvreleaseimage boundary) (cvreleaseimage baboon) 그림 13. cvcolorlabeling 5) cvextractsamepixel cvextractsamepixel 함수는입력받은영상에서같은픽셀값의좌표를가져오기위한함수이다. 레 이블링된이미지에서같은주위영역을가져오기위한함수로사용된다. 사용방법은 (cvextractsamepixel grayscaleimage pixelvalue) 로 grayscaleimage 는
cvcvtcolor 함수를이용하여 Gray 영상으로변환한리턴값을이용하고, pixelvalue 는해당픽셀값을 입력하며 0~255 까지허용한다. (set 'baboon (cvloadimage 'images\baboon.jpg)) (set 'boundary (cvcolorlabeling baboon 300 4000 100 150 3)) (set 'SP1 (cvextractsamepixel boundary 1)) (set 'whiteimg (cvcloneimage baboon)) (set 'white (cvsetscalar 255 255 255 0)) (cvset whiteimg white) (cvsetpixel baboon whiteimg SP1 0 0) (cvshowimage whiteimg 'result) (cvreleaseimage whiteimg) (cvreleaseimage boundary) (cvreleaseimage baboon) 그림 14. cvextractsamepixel 6) cvcreatestructuringelement 모폴로지기반처리를위해구조화요소 (structuring element) 를생성한다. 사용방법은 (cvcreatestructuringelement cols rows anchor_x anchor_y shape) 로 cols는구조화요소의높이, rows는구조화요소의너비, anchor_x는수평방향에서의시작위치, anchor_y는수직방향에서의시작위치, shape는정사각형 (SHAPE_RECT), 십자가형 (SHAPE_CROSS), 타원형 (SHAPE_ELLIPSE) 으로나타낼수있다.
(set 'element (cvcreatestructuringelement 3 3 1 1 SHAPE_RECT)) 7) cvreleasestructuringelement 할당된구조화요소 (structuring element) 에대한메모리를해제한다. 사용방법은 (cvcreatestructuringelement cvcreatestructuringelement) 로 cvcreatestructuringelement 는 cvcreatestructuringelement 의리턴값을입력한다. (set 'element (cvcreatestructuringelement 3 3 1 1 SHAPE_RECT)) (cvreleasestructuringelement element) 8) cverode 침식연산 (erosion operator) 은배경을확장시키고객체의크기를축소한다. 주로객체안이나객체와배경사이에있는잡음또는임펄스 (impulse) 잡음을제거하기위해쓰인다. 이를위해 cverode 함수를이용한다. 사용방법은 '(cverode Binary/GrayScaleImage cvcreatestructuringelement iterations)' 로 Binary/GrayScaleImage는이진화된이미지나명암도레벨의영상을입력하고 cvcreatestructuringelement는 cvcreatestructuringelement의리턴값을입력한다. iterations는반복횟수를말한다. (set 'ab (cvloadimage 'images\lena.jpg)) (set 'gray (cvcvtcolor ab RGB2GRAY 1)) (set 'element (cvcreatestructuringelement 3 3 1 1 SHAPE_RECT)) (set 'erode (cverode gray element 1)) (cvshowimage erode 'result) (cvreleasestructuringelement element) (cvreleaseimage erode) (cvreleaseimage gray) (cvreleaseimage ab)
그림 15. cverode 9) cvdilate 팽창연산 (dilation operator) 은침식연산과반대의역할을하며, 배경을축소시키고객체의크기를확장한다. 또한객체안의빈공간을메우는역할을한다. 이를위해 cvdliate 함수를사용한다. 사용방법은 '(cvdilate Binary/GrayScaleImage cvcreatestructuringelement iterations)' 로 Binary/GrayScaleImage는이진화된이미지나명암도레벨의영상을입력하고 cvcreatestructuringelement는 cvcreatestructuringelement의리턴값을입력한다. iterations는반복횟수를말한다. (set 'ab (cvloadimage 'images\lena.jpg)) (set 'gray (cvcvtcolor ab RGB2GRAY 1)) (set 'element (cvcreatestructuringelement 3 3 1 1 SHAPE_RECT)) (set 'dilate (cvdilate gray element 1)) (cvshowimage dilate 'result) (cvreleasestructuringelement element) (cvreleaseimage dilate) (cvreleaseimage gray) (cvreleaseimage ab)
그림 16. cvdliate 10) cvmorpholgy 열림연산 (opening operator) 은침식연산과팽창연산순으로조합하여수행한다. 축소한다음다시객체를확장시키므로원영상과동일할것이라고생각하기쉬운데실제로침식연산을수행하면미세한잡음을제거하는역할을한다. 그리고다시팽창연산을수행하면원영상의크기로돌아가기때문에어느정도잡음을제거한결과를얻는다. 닫힘연산 (closing operator) 은팽창연산과침식연산순으로조합하여수행한다. 팽창연산으로객체를확장하기때문에객체내빈공간이매워진후, 침식연산으로원영상의크기로돌아가게한다. 탑-햇 (top-hat) 연산은원명암도영상에서열림연산을수행한결과를차연산한다. 모폴로지그래디언트 (morpholgy gradient) 연산은팽창연산과침식연산수행한결과를차연산한것이다. 사용방법은 '(cvmorphology Binary/GrayScaleImage CreateStructuringElement operation)' 로 Binary/GrayScaleImage는이진화된이미지나명암도레벨의영상을입력하고 cvcreatestructuringelement는 cvcreatestructuringelement의리턴값을입력한다. operation은연산타입을말한다.
(set 'ab (cvloadimage 'images\lena.jpg)) (set 'gray (cvcvtcolor ab RGB2GRAY 1)) (set 'element (cvcreatestructuringelement 3 3 1 1 SHAPE_RECT)) (set 'morphology (cvmorphology gray element MOP_OPEN)) (cvshowimage morphology 'result) (cvreleasestructuringelement element) (cvreleaseimage morphology) (cvreleaseimage gray) (cvreleaseimage ab) 그림 17. 열림연산 (opening operator) 그림 18. 닫힘연산 (closing operator)