Video & Image VIPLProcessing Lab. 2014-1 Myoung-Jin Kim, Ph.D. (webzealer@ssu.ac.kr)
목차 1 색모델 2 색과그레이스케일속성지정 3 점및선속성지정 4 영역채우기속성 5 영역채우기알고리듬 6 안티에일리어싱
색의성질 가시광선 사람의눈으로볼수있는일정주파수범위의전자기파 약 4.0 10 14 Hz부터 7.9 10 14 Hz 범위의영역 저주파 (4.0 10 14 Hz 부근 ) : 빨강 고주파 (7.9 10 14 Hz 부근 ) : 보라 가시영역의모든주파수를포함하는백색광이물체에입사되면일부주파수는흡수되고나머지는반사됨 반사되는빛의색조합에의해물체의색을감지함 교재관련부분 : 100 쪽
색의성질 빛의에너지분포와지배주파수 반사광에너지 E D 지배주파수 광원에너지 E w 빨강 백색광 f 보라 빨강 보라 f 교재관련부분 : 100~101 쪽
색의성질 색의 3 요소 반사광에너지 E D 색조 (hue) : 빛의색을결정하는요소 지배주파수에해당되는색성분 E w 빨강 보라 f 채도 (saturation) : 색이순수한스펙트럼색에얼마나가까운가를나타내는요소 E D E W 가클수록채도가높음 명도 (brightness, luminance) : 빛의전체적인에너지크기에해당되는요소 교재관련부분 : 101 쪽
원색 (primary colors) 삼원자극이론 (tri-stimulus theory) 원추세포 : 사람의시각세포중색을감지하는역할을함 파장이 440nm, 545nm, 580nm 근방의빛에대한흡수율이가장높은세종류가있음 사람이느끼는색은세종류의원추세포에흡수되는빛의양 r, g, b에의해결정됨 두빛에대해감지되는 r, g, b의양이서로같다면색을구성하는주파수성분이다르더라도같은색으로인지될수있음 교재관련부분 : 101 쪽
원색 (primary colors) 색합성을위한원색 컴퓨터모니터나 TV 등의컬러디스플레이에서는빨강 (R), 초록 (G), 파랑 (B) 의세가지파장의빛 (3원색) 을혼합하여색을표현함 색영역 (color gamut) : 선택된원색을혼합하여만들어낼수있는모든색들의집합 색영역이사람의눈으로볼수 있는모든색을포함할수 있을까? 교재관련부분 : 101 쪽
원색 (primary colors) 색정합실험 빨강광원초록광원파랑광원 기준파장광원 크기만큼빨강을더해줌 혼합색 기준색 색 정합 R G B 0.2 0 양 -0.2 0.4 f B fg 400 f R 500 600 700 빛을흡수할수는없음 λ 3 원색을이용해서만들수없음 교재관련부분 : 101~102 쪽
원색 (primary colors) CIE XYZ 색모델 인간의시각특성에맞추어정의된 X, Y, Z라는가상의표준원색 X, Y, Z는각각빨강, 초록, 파랑에가까운색 Y는밝기값이되도록설계 이를혼합하여평균적인인간의눈에보이는모든색을표현할수있음 색정합 C I E 양 1.5 1.0 0.5 f Z f Y f X 0 400 500 600 700 λ 교재관련부분 : 102 쪽
원색 (primary colors) CIE XYZ 색모델 색성분정규화 x = y = z = X X + Y + Z Y X + Y + Z Z X + Y + Z = 1 x y x, y, Y 값만있으면 X, Y, Z 값을모두구할수있음 (x, y) 만으로밝기를제외한색정보를표현할수있음 교재관련부분 : 103 쪽
원색 (primary colors) CIE XYZ 색모델 C 지점 : 태양빛에해당되는백색광 가장자리색 : 스펙트럼색에해당되는순수한색상 평균이 C 지점인두색상은보색관계 스펙트럼색은 C 지점과스펙트럼색을잇는선상의색에대한지배주파수색 0.9 y 0.8 0.6 500 0.4 490 0.2 480 0.0 0.0 520 540 C 560 580 ( ㄱ ) 의보색 600 620 700 380 x 0.2 0.4 0.6 0.8 교재관련부분 : 103~104 쪽
원색 (primary colors) CIE XYZ 색모델 임의의세스펙트럼원색을조합하여모든가시광선의색을만들어낼수없음 이상적인 RGB 광원을활용하더라도 R, G, B를잇는삼각형내의색만을표현할수있음 일반 RGB 컬러모니터로표현할수있는색영역은이보다더좁은영역임 0.9 y 0.8 0.6 500 0.4 490 0.2 480 0.0 0.0 520 B 540 G C 560 580 600 620 700 R 380 x 0.2 0.4 0.6 0.8 교재관련부분 : 103~104 쪽
색모델 RGB 색모델 R( 빨강 ), G( 초록 ), B( 파랑 ) 를삼원색으로하는색모델 가산색모델 : 삼원색의성분이더하여혼합색을만듦 스스로빛을내어색을표현하는출력장치에적합한모델 G (0, 1, 1) (0, 1, 0) (1, 1, 0) 빨강 (R) (1, 1, 1) (0, 0, 1) B (0, 0, 0) (1, 0, 0) R 초록 (G) 파랑 (B) (1, 0, 1) 교재관련부분 : 104~105 쪽
색모델 CMY 색모델 C( 청록 ), M( 자홍 ), Y( 노랑 ) 를삼원색으로하는색모델 감산색모델 : 삼원색의성분을흡수 ( 잉크젯 / 컬러레이저프린터 ) 외부로부터가해진빛을반사하는형태의출력에적용 1 M 청록 (C) Y 1 1 C 자홍 (M) 노랑 (Y) 교재관련부분 : 105~106 쪽
색모델 CMY 색모델 CMY 색모델과 RGB 색모델사이의변환 C M Y 1 = 1-1 R G B R G B 1 = 1-1 C M Y CMYK 색모델 K 성분 : 회색의농도를결정 CMY 모델에비해회색의표현이용이 교재관련부분 : 105~106 쪽
색모델 HSV 색모델 사람이생각하는직관적인개념에보다근접한모델 H(hue, 색조 ), S(saturation, 채도 ), V(value, brightness, 명도 ) G 초록 120 파랑 240 V V=1 빨강 0 B R V=0 H S 교재관련부분 : 107 쪽
색모델 비디오신호와관련된색모델 YIQ : NTSC 방식의아날로그 TV 복합비디오신호용색부호화모델 YUV : PAL 방식의아날로그 TV 복합비디오신호용색부호화모델 YC b C r : 디지털 TV의색모델 Y 성분은밝기, 나머지성분은색표현에사용됨 사람의시각에더욱민감한 Y 성분에더많은정보량을 부여함으로써적은정보량으로효율적인색표현이가능함 교재관련부분 : 108 쪽
목차 1 2 색모델 색과그레이스케일속성지정 3 점및선속성지정 4 영역채우기속성 5 영역채우기알고리듬 6 안티에일리어싱
그래픽스기본요소의속성지정방법 그래픽기본요소함수들에속성파라미터를인수로 포함시키는방법 지정된인수값으로기본요소의속성을결정 현재속성값들에대한목록을가지고있는방법 속성값을설정 / 갱신하는별도의함수를사용하여속성을지정 디스플레이루틴은현재의속성을이용하여기본요소를디스플레이함 OpenGL을포함한많은라이브러리들이이방법을사용 교재관련부분 : 109 쪽
색과그레이스케일 프레임버퍼에색을저장하는방법 1 각픽셀의 RGB 색정보를프레임버퍼에직접저장하는방법 2 색부호를별도의테이블에넣고, 이테이블의색항목을 지정하는인덱스를프레임버퍼에저장하는방법 그레이스케일표현 RGB 성분을모두동일한색으로지정 교재관련부분 : 110~111 쪽
색속성 색깊이 (color depth) 하나의픽셀을표현하는데사용되는비트수 24bits
색속성 OpenGL 에서의색지정 정수자료형 : 0부터그자료형의최대값까지사용 Glubyte : (255, 0, 128) GLint : (0x7fffffff, 0, 0x40000000) 실수자료형 : 0 부터 1 사이의값을사용 Glclampf : (1.0f, 0.0f, 0.5f) GLclampd : (1.0, 0.0, 0.5)
색혼합 알파성분 색의투명도등을표현하기위한목적으로사용할수있는보조데이터 반투명한도형의색이다른도형이나배경등의색과혼합되는효과를내는데활용할수있음 α = 0.7
OpenGL 의색함수 색설정명령 void glcolor*( 색성분 ); 예 R G B glcolor3f(0.0, 1.0, 1.0); glcolor3ub(0, 255, 255); glcolor3s(0, 0x7fff, 0x7fff); glcolor3i(0, 0x7fffffff, 0x7fffffff); 교재관련부분 : 111~112 쪽
OpenGL 의색함수 색혼합 겹쳐진물체, 물체와배경등의색에대한혼합효과를내는 함수 OpenGL 에서의색혼합 프레임메모리에현재저장되어있는색을목적지색이라함 현재의그림위에겹쳐그리는물체의색을프레임버퍼의색과결합 겹쳐그리는물체의색을소스색이라함 교재관련부분 : 112~113 쪽
OpenGL 의색함수 OpenGL 의색혼합 목적지색성분 (R d, G d, B d, A d ) 목적지혼합인수 (D r, D g, D b, D a ) 프레임버퍼 소스색성분 (R s, G s, B s, A s ) 소스혼합인수 (S r, S g, S b, S a ) (S r R s +D r R d, S g G s +D g G d, S b B s +D b B d, S a A s +D a A d ) 교재관련부분 : 112~113 쪽
OpenGL 의색함수 색혼합의활성화 glenable(gl_blend); 색혼합의해제 gldisable(gl_blend); 교재관련부분 : 112~113 쪽
OpenGL 의색함수 색혼합인수의선택 void glblendfunc(glenum sfactor, GLenum dfactor); sfactor, dfactor : 소스및목적지혼합계수 GL_ZERO : (0.0, 0.0, 0.0, 0.0), dfactor의디폴트값임 GL_ONE : (1.0, 1.0, 1.0, 1.0), sfactor의디폴트값임 GL_SRC_ALPHA : 소스의알파값사용 GL_DST_ALPHA : 목적지알파값사용 GL_ONE_MINUS_SRC_ALPHA : (1 - 소스알파값 ) 사용 GL_ONE_MINUS_DST_ALPHA : (1 - 목적지알파값 ) 사용 교재관련부분 : 114 쪽
목차 1 2 3 4 색모델색과그레이스케일속성지정점및선속성지정영역채우기속성 5 영역채우기알고리듬 6 안티에일리어싱
OpenGL 의점속성함수 점의크기 void glpointsize(glfloat size); 예 glpointsize(5.0); glbegin(gl_points); glvertex2i(70, 50); glend(); glpointsize(10.0); glbegin(gl_points); glvertex2i(130, 50); glend(); 교재관련부분 : 114 쪽
OpenGL 의점속성함수 점의안티에일리어싱 glenable(gl_point_smooth); 예 glpointsize(10.0); glbegin(gl_points); glvertex2i(70, 50); glend(); glenable(gl_point_smooth); glbegin(gl_points); glvertex2i(130, 50); glend(); 교재관련부분 : 114 쪽
선속성 선폭속성 기울기크기가 1.0 이하인경우직선경로의위와아래로, 1.0보다큰경우좌우로선의폭만큼픽셀을추가 선의굵기가각각 ( 수직직선또는대각선등 ) 다르다 선의끝모양이일정하다 교재관련부분 : 115 쪽
선속성 선분캡 굵은선분의끝모양을다듬는방법에대한속성 사각캡 butt cap 원형캡 round cap 돌출사각캡 projecting square cap 교재관련부분 : 115~116 쪽
선속성 선분연결 두개의굵은선분의연결부분을다듬는방법에대한속성 연귀연결 miter join 원형연결 round join 사선연결 bevel join 교재관련부분 : 116 쪽
OpenGL 의선속성함수 선폭속성지정 void gllinewidth(glfloat width); 예 gllinewidth(10); glcolor3f(1, 0, 0); glbegin(gl_lines); glvertex2i(50, 40); glvertex2i(150, 40); glvertex2i(50, 60); glvertex2i(150, 160); glend(); 수평및대각선의굵기가다르다 선의끝모양이일정하다 교재관련부분 : 116~117 쪽
OpenGL 의선속성함수 선의안티에일리어싱 glenable(gl_line_smooth); 예 glenable(gl_line_smooth); gllinewidth(10); glcolor3f(1, 0, 0); glbegin(gl_lines); glvertex2i(50, 40); glvertex2i(150, 40); glvertex2i(50, 60); glvertex2i(150, 160); glend(); 교재관련부분 : 116~117 쪽
선속성 선스타일 실선, 파선, 점선등 일정구간의픽셀을그리거나건너뛰는것을반복하여그림 실선파선점선 교재관련부분 : 117 쪽
OpenGL 의선스타일속성함수 OpenGL 의선스타일지정 16 비트의픽셀마스크로지정 픽셀마스크 1111111110000000 0xff80
OpenGL 의선스타일속성함수 OpenGL 의선스타일활성화 glenable(gl_line_stipple); OpenGL 의선스타일해제 gldisable(gl_line_stipple); OpenGL 의선스타일픽셀마스크정의 void gllinestipple(glint factor, GLushort pattern); 반복횟수
OpenGL 의선스타일속성함수 예 glenable(gl_line_smooth); gllinewidth(5.0); glenable(gl_line_stipple); gllinestipple(2, 0xf99f); glbegin(gl_lines); glvertex2i(50, 40); glvertex2i(150, 40); glvertex2i(50, 60); glvertex2i(150, 160); glend(); 1 1 1 1 1 0 011 1 0 0 1 1 1 1 1
OpenGL 의색보간선그리기 색보간선그리기 서로다른색의두끝점색이서서히혼합되며선을그림 음영모델함수를활용 void glshademodel(glenum mode); mode : GL_SMOOTH 또는 GL_FLAT
OpenGL 의색보간선그리기 예 glshademodel(gl_smooth); gllinewidth(10.0); glbegin(gl_lines); glcolor3f(1.0, 0.0, 0.0); glvertex2i(50, 60); glcolor3f(0.0, 0.0, 1.0); glvertex2i(150, 160); glend();
목차 1 2 3 4 색모델색과그레이스케일속성지정점및선속성지정영역채우기속성 5 영역채우기알고리듬 6 안티에일리어싱
영역채우기 채우기속성 균일한색 패턴채우기 영역의정의 다각형경계 불규칙한곡선경계 교재관련부분 : 119~132 쪽
비트맵패턴채우기 타일붙이기 직사각형배열형태의마스크로패턴정의 m x m y 대상영역을모두채울때까지수평및수직방향으로 반복적으로복제 마스크 교재관련부분 : 119 쪽
비트맵패턴채우기 타일붙이기의기준위치 1 윈도원점기준 m y -1 0 0 마스크 m x -1 타일붙이기 x m = (x - x w ) mod m x y m = (y - y w ) mod m y (x w, y w ) = (0,0) 디스플레이윈도 교재관련부분 : 119 쪽
비트맵패턴채우기 타일붙이기의기준위치 1 윈도원점기준 ( 원점을이용했기때문에 ) 경계선의영역을알수없음 ( 도형이움직이더라도 ) 도형안의패턴은변화가없음 (x w, y w ) 디스플레이윈도 교재관련부분 : 119~120 쪽
비트맵패턴채우기 타일붙이기의기준위치 2 도형의경계상자모서리기준 m y -1 0 0 m x -1 타일붙이기 경계상자 x m = (x - x b ) mod m x y m = (y - y b ) mod m y (x b, y b ) 디스플레이윈도 교재관련부분 : 120 쪽
비트맵패턴채우기 타일붙이기의기준위치 2 도형의경계상자모서리기준 (x b1, y b1 ) (x b2, y b2 ) 디스플레이윈도 교재관련부분 : 120 쪽
OpenGL 의채우기속성함수 다각형모드설정 void glpolygonmode(glenum face, GLenum mode); face : 모드를설정할면선택 GL_FRONT : 앞면 GL_BACK : 뒷면 GL_FRONT_AND_BACK : 양면 mode : 다각형그리기방법 GL_POINT : 꼭짓점만그림 GL_LINE : 변만그림 GL_FILL : 다각형내부를채움
OpenGL 의채우기속성함수 비트맵마스크설정 void glpolygonstipple(const GLubyte* mask); mask : 32 32 비트맵마스크 1111 1111 1111 1100 0011 1111 1111 1111 F F F C 3 F F F GLubyte fillpattern[ ] = { 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xf0, }; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
OpenGL 의채우기속성함수 비트맵마스크적용예 - [ 소스코드 4-1] void drawbitmappolygon( ) { GLubyte fillpattern[ ] = { }; glclear(gl_color_buffer_bit); glenable(gl_polygon_stipple); glpolygonstipple(fillpattern); glpolygonmode(gl_front, GL_FILL); glbegin(gl_polygon); glend(); glflush(); }
OpenGL 의채우기속성함수 비트맵마스크적용예 - [ 소스코드 4-1] void drawbitmappolygon( ) { glbegin(gl_polygon); glcolor3f(0, 0, 1); glvertex2i(100, 200); glcolor3f(0, 1, 1); glvertex2i(50, 50); glclor3f(0, 1, 0); glvertex2i(350, 50); glcolor3f(1, 0, 0); glvertex2i(250, 250); glend(); glflush(); }
목차 1 2 3 4 5 색모델색과그레이스케일속성지정점및선속성지정영역채우기속성영역채우기알고리듬 6 안티에일리어싱
주사선다각형채우기 홀 - 짝규칙 y y 4 E 1 외부 외부 (2 번교차하는것으로간주 ) E 9 y 3 E 8 E 7 y 2 y 1 E 2 0( 짝 ) 1( 홀 ) E 3 E 6 E 4 3( 홀 ) 2( 짝 ) 4( 짝 ) E 5 내부 외부 (1 번만교차하는것으로간주 ) x 교재관련부분 : 125 쪽
주사선다각형채우기 래스터좌표와픽셀영역 직사각형 (0, 0) - (4, 3) y 4 3=12 픽셀 4 3 3 2 2 1 1 0 0 0 1 2 3 4 5 0 1 2 3 4 5 4=20 픽셀 0 x 3 0 y 2 x 교재관련부분 : 126 쪽
주사선다각형채우기 래스터좌표를고려한주사선다각형채우기 1 변의두정점좌표가 (x 1, y 1 ) 과 (x 2, y 2 ) 이고, y 1 <y 2 인경우점 (x 2, y 2 ) 는선분에포함되지않는것으로한다. 2 x축과평행인선분은다각형채우기과정에서제외한다. 3 y i 번째주사선의채우기과정에서주사선과다각형의 교차횟수가홀수인구간의 x 좌표범위가 x a 부터 x b 까지라면 x a 부터 x b -1 까지의픽셀들을내부픽셀로한다. 교재관련부분 : 126~127 쪽
주사선다각형채우기 래스터좌표를고려한주사선다각형채우기 y 0( 짝 ) E 1 E 9 E 8 E7 0( 짝 ) 1( 홀 ) 2( 짝 ) E 2 E 4 3( 홀 ) E 6 0( 짝 ) E 3 2( 짝 ) E 5 4( 짝 ) x 교재관련부분 : 127 쪽
주사선다각형채우기 다각형선분테이블 버켓과선분리스트로구성됨 버켓 : 주사선수만큼의버켓항목이존재하며, 각항목에는해당주사선에서시작하는선분리스트가연결됨 선분리스트 : 각선분에대한정보가저장됨 선분의양끝점이 (x 1, y 1 ), (x 2, y 2 ) 이고 y 1 < y 2 인경우 x min y max Δx ptr x min : y좌표값이작은끝점의 x 좌표 ( 즉, x 1 ) y max : 나머지끝점의 y좌표 ( 즉, y 2 ) Δx : 기울기역수 ptr : 다음선분항목을가리키는포인터 교재관련부분 : 127~129 쪽
주사선다각형채우기 다각형선분테이블 다각형의변을구성하는선분들을저장 수평선분은제외 주사선에서시작하는선분들의리스트 버켓 9 8 7 3 2 1 0 주사선번호 6 14-1/3 6 12 3/4 12 12-3/4 선분 fa 선분 ef 선분 de x min y max Δx 2 14 1/6 선분 ab 13 8-1/6 선분 cd 주사선번호 14 12 10 8 6 4 2 b a f e d 2 4 6 8 101214 교재관련부분 : 127~129 쪽 c
주사선다각형채우기 활동선분목록 현재처리되는주사선과교차하는선분의리스트 선분항목의정보 x y max Δx ptr x : 선분과주사선의교점 x좌표 y max : 나머지끝점의 y좌표 ( 즉, y 2 ) Δx : 기울기역수 ptr : 다음선분항목을가리키는포인터 선분항목들은 x좌표의순서에따라정렬된상태를유지 현주사선의선분테이블버켓에연결된선분들은활동선분목록에추가하고, 현주사선이 y max 인항목은제거 교재관련부분 : 127~129 쪽
주사선다각형채우기 활동선분목록 버켓 7 3 2 1 0 14 12 10 8 6 4 2 2 14 1/6 13 8-1/6 선분 ab 선분 cd a e d f b c 2 4 6 8 101214 2 번주사선에서의활동선분목록 2 14 1/6 13 8-1/6 3 번주사선에서의활동선분목록 2 1 6 x 14 1/6 12 5 6 8-1/6 y max Δx 홀수인구간의 x 좌표범위가 x a 부터 x b 까지라면 x a 부터 x b -1 까지의픽셀들을내부픽셀로한다. 2 x 12 범위의픽셀 3 x 12 범위의픽셀 교재관련부분 : 127~129 쪽
주사선다각형채우기 활동선분목록 버켓 7 3 2 1 0 14 12 10 8 6 4 2 2 14 1/6 13 8-1/6 선분 ab 선분 cd a e d f b c 2 4 6 8 101214 3 번주사선에서의활동선분목록 2 1 6 홀수인구간의 x 좌표범위가 x a 부터 x b 까지라면 x a 부터 x b -1 까지의픽셀들을내부픽셀로한다. 14 1/6 8-1/6 3 x 12 범위의픽셀 12 5 6 4 번주사선에서의활동선분목록 2 2 6 14 1/6 8-1/6 12 4 6 3 x 12 범위의픽셀 교재관련부분 : 127~129 쪽
주사선다각형채우기 활동선분목록 버켓 7 3 2 1 0 14 12 10 8 6 4 2 2 14 1/6 13 8-1/6 선분 ab 선분 cd a e d f b c 2 4 6 8 101214 4 번주사선에서의활동선분목록 2 2 6 홀수인구간의 x 좌표범위가 x a 부터 x b 까지라면 x a 부터 x b -1 까지의픽셀들을내부픽셀로한다. 14 1/6 8-1/6 3 x 12 범위의픽셀 12 4 6 5 번주사선에서의활동선분목록 2 3 6 14 1/6 8-1/6 12 3 6 3 x 12 범위의픽셀 교재관련부분 : 127~129 쪽
주사선다각형채우기 활동선분목록 버켓 7 3 2 1 0 14 12 10 8 6 4 2 2 14 1/6 13 8-1/6 선분 ab 선분 cd a e d f b c 2 4 6 8 101214 5 번주사선에서의활동선분목록 2 3 6 14 1/6 8-1/6 12 3 6 6 번주사선에서의활동선분목록 2 4 6 14 1/6 8-1/6 12 2 6 홀수인구간의 x 좌표범위가 x a 부터 x b 까지라면 x a 부터 x b -1 까지의픽셀들을내부픽셀로한다. 3 x 12 범위의픽셀 3 x 12 범위의픽셀 교재관련부분 : 127~129 쪽
주사선다각형채우기 활동선분목록 버켓 7 3 2 1 0 14 12 10 8 6 4 2 2 14 1/6 13 8-1/6 선분 ab 선분 cd a e d f b c 2 4 6 8 101214 6 번주사선에서의활동선분목록 2 4 6 홀수인구간의 x 좌표범위가 x a 부터 x b 까지라면 x a 부터 x b -1 까지의픽셀들을내부픽셀로한다. 14 1/6 8-1/6 3 x 12 범위의픽셀 12 2 6 7 번주사선에서의활동선분목록 2 5 6 14 1/6 8-1/6 12 1 6 3 x 12 범위의픽셀 교재관련부분 : 127~129 쪽
주사선다각형채우기 활동선분목록 버켓 9 8 2 5 6 6 14-1/3 6 12 3/44 12 12-3/4 선분 fa 선분 ef 2 b 선분 de c 7 번주사선에서의활동선분목록 14 1/6 8-1/6 3 x 12 범위의픽셀 12 1 6 8 번주사선에서의활동선분목록 14 12 10 8 6 현주사선이 y max 인항목은제거 3 14 1/6 6 14-1/3 6 12 3/4 a f e d 2 4 6 8 101214 12 12-3/4 3 x 5, 6 x 11 범위의픽셀 교재관련부분 : 127~129 쪽
주사선다각형채우기 활동선분목록 버켓 9 8 14 12 10 8 6 6 14-1/3 6 12 3/44 12 12-3/4 선분 fa 선분 ef 2 b 선분 de c a f e d 8 번주사선에서의활동선분목록 2 4 6 8 101214 3 14 1/6 6 14-1/3 6 12 3/4 12 12-3/4 3 x 5, 6 x 11 범위의픽셀 9 번주사선에서의활동선분목록 3 1 6 14 1/6 14-1/3 5 2 3 6 3 4 12 3/4 11 1 4 12-3/4 4 x 5, 7 x 11 범위의픽셀 교재관련부분 : 127~129 쪽
주사선다각형채우기 활동선분목록 버켓 9 8 14 12 10 8 6 6 14-1/3 6 12 3/44 12 12-3/4 선분 fa 선분 ef 2 b 선분 de c a f e d 9 번주사선에서의활동선분목록 2 4 6 8 101214 3 1 6 14 1/6 14-1/3 12 3/4 5 2 3 6 3 4 11 1 4 12-3/4 4 x 5, 7 x 11 범위의픽셀 10 번주사선에서의활동선분목록 3 2 6 14 1/6 14-1/3 5 1 3 7 2 4 12 3/4 10 2 4 12-3/4 4 x 5, 8 x 10 범위의픽셀 교재관련부분 : 127~129 쪽
주사선다각형채우기 활동선분목록 버켓 9 8 14 12 10 8 6 6 14-1/3 6 12 3/44 12 12-3/4 선분 fa 선분 ef 2 b 선분 de c a f e d 10 번주사선에서의활동선분목록 2 4 6 8 101214 3 2 6 14 1/6 14-1/3 12 3/4 5 1 3 7 2 4 10 2 4 12-3/4 4 x 5, 8 x 10 범위의픽셀 11 번주사선에서의활동선분목록 3 3 6 14 1/6 5 14-1/3 12 3/4 8 1 4 9 3 4 12-3/4 4 x 4, 9 x 9 범위의픽셀 교재관련부분 : 127~129 쪽
주사선다각형채우기 활동선분목록 버켓 9 8 14 12 10 8 6 6 14-1/3 6 12 3/44 12 12-3/4 선분 fa 선분 ef 2 b 선분 de c a f e d 11 번주사선에서의활동선분목록 2 4 6 8 101214 3 3 6 14 1/6 5 14-1/3 12 3/4 8 1 4 10 2 4 12-3/4 4 x 4, 9 x 9 범위의픽셀 12 번주사선에서의활동선분목록 3 4 6 14 1/6 14-1/3 4 2 3 4 x 4 범위의픽셀 교재관련부분 : 127~129 쪽
불규칙한경계로정의되는영역채우기 시작점 빨강경계내부영역채우기 백색영역채우기 경계선채우기 범람채우기 교재관련부분 : 130 쪽
경계선채우기알고리듬 이웃의정의 4 방향연결 8 방향연결 a a 교재관련부분 : 130~131 쪽
경계선채우기알고리듬 경계선이 4 방향연결로정의된경우의채우기 b 와같이일부영역이채원지지않음 a b 4 방향에서는연결되지않음 a 와 b 를연결하려면 8 방향연결을적용해야한다. 교재관련부분 : 131 쪽
경계선채우기알고리듬 경계선이 8 방향연결로정의된경우의채우기 d와같이외부영역이채원질수있음 d c 4 방향연결을적용해야한다. 교재관련부분 : 131 쪽
경계선채우기알고리듬 // x, y : 픽셀좌표, fcol : 채우기색, bcol : 경계선색 void boundaryfill4(int x, int y, int fcol, int bcol) { { int intcol; getpixel(x, y, intcol); // (x, y) 위치의픽셀색을읽음 // 경계선색이나채우기색이아닌경우 if (intcol!= bcol && intcol!= fcol) { setpixel(x, y); // 현재위치를채우기색으로그림 // 4방향연결성에따라이웃픽셀에경계선채우기를적용 boundaryfill4(x+1, y, fcol, bcol); 왼쪽채우기 boundaryfill4(x-1, y, fcol, bcol); 오른쪽채우기 boundaryfill4(x, y+1, fcol, bcol); 위쪽채우기 boundaryfill4(x, y-1, fcol, bcol); 아래쪽채우기 } } 교재관련부분 : 132 쪽
범람채우기알고리듬 동일색영역을지정된채우기속성에따라채움 채우고자하는영역 교재관련부분 : 132 쪽
범람채우기알고리듬 //x, y : 픽셀좌표, fcol : 채우기색, intcol : 내부색 void floodfill4(int x, int y, int fcol, int intcol) { { int currcol; getpixel(x, y, currcol); // (x, y) 위치의픽셀색을읽음 // 현위치의색이영역내부색인경우 if (currcol == intcol) { setpixel(x, y); // 현재위치를채우기색으로그림 // 4방향연결성에따라이웃픽셀에경계선채우기를적용 floodfill4(x+1, y, fcol, intcol); 왼쪽채우기 floodfill4(x-1, y, fcol, intcol); 오른쪽채우기 floodfill4(x, y+1, fcol, intcol); 위쪽채우기 floodfill4(x, y-1, fcol, intcol); 아래쪽채우기 } } 교재관련부분 : 132 쪽
목차 1 2 3 4 5 6 색모델색과그레이스케일속성지정점및선속성지정영역채우기속성영역채우기알고리듬안티에일리어싱
에일리어싱 낮은해상도로인한정보왜곡 교재관련부분 : 133 쪽
에일리어싱 낮은해상도로인한정보왜곡 교재관련부분 : 133 쪽
에일리어싱 낮은해상도로인한정보왜곡 352x288 176x144 88x72 44x36 교재관련부분 : 134~134 쪽
안티에일리어싱 전필터링 (prefiltering) 물체가차지하는픽셀면적을기준으로픽셀의밝기를 조절하는방법 영역샘플링 (area sampling) 이라고도함 y k +0.5 y = m(x k - 0.5) + b y k y k -0.5 x k -0.5 픽셀 (x k, y k ) a 색 b 색 x k x k +0.5 y = m(x k + 0.5) + b Area = mx k + b - y k + 0.5 a와 b의면적비율로색을결정해서채운다 교재관련부분 : 134~135 쪽
안티에일리어싱 슈퍼샘플링 (supersampling) 하나의픽셀을여러개의작은픽셀로분할 물체영역이차지하는서브픽셀의수에따라픽셀색결정 22 22 0 0 4/9 21 21 1/9 6/9 5/9 20 10 11 12 7/9 3/9 20 10 11 12 0 교재관련부분 : 135~136 쪽
안티에일리어싱 후필터링 (postfiltering) 이웃샘플들의가중치평균으로픽셀값을결정 교재관련부분 : 136 쪽
안티에일리어싱 후필터링 (postfiltering) 이웃샘플들의가중치평균으로픽셀값을결정 1 16 1 2 1 2 4 2 1 2 1 교재관련부분 : 136 쪽
OpenGL 의안티에일리어싱함수 색혼합활성화 glenable(gl_blend); glblendfunc(gl_src_alpha, GL_ONE_MINUS_SRC_ALPHA); 안티에일리어싱활성화 void glenable(glenum aaprimitive); aaprimitive : 안티에일리어싱을적용할그래픽스기본요소의유형 GL_POINT_SMOOTH GL_LINE_SMOOTH GL_POLYGON_SMOOTH 교재관련부분 : 137 쪽
OpenGL 의안티에일리어싱함수 안티에일리어싱적용예 : [ 소스코드 4-2] void drawpolygonantialias(void) { glclear(gl_color_buffer_bit); // 윈도우색으로지움 } glenable(gl_blend); // 색혼합활성화 glblendfunc(gl_src_alpha, GL_ONE_MINUS_SRC_ALPHA); glenable(gl_line_smooth); // 선안티에일리어싱활성화 glenable(gl_point_smooth); // 점안티에일리어싱활성화 glcolor3f(0.5, 0.5, 1.0); // 그리기색상지정 교재관련부분 : 137~138 쪽
OpenGL 의안티에일리어싱함수 안티에일리어싱적용예 : [ 소스코드 4-2] void drawpolygonantialias(void) { gllinewidth(10); // 선폭지정 glpolygonmode(gl_front, GL_LINE); // 다각형의변을그림 glbegin(gl_polygon); // 다각형그리기 glvertex2i(100, 200); glvertex2i(50, 50); glvertex2i(350, 50); glvertex2i(250, 250); glend(); } 교재관련부분 : 137~138 쪽
OpenGL 의안티에일리어싱함수 안티에일리어싱적용예 : [ 소스코드 4-2] void drawpolygonantialias(void) { glpointsize(10); // 점크기지정 glpolygonmode(gl_front, GL_POINT); glbegin(gl_polygon); // 변의연결에원형연결적용 glvertex2i(100, 200); glvertex2i(50, 50); glvertex2i(350, 50); glvertex2i(250, 250); glend(); } 교재관련부분 : 137~138 쪽
정리하기 1 색의 3 요소 : 색조 (hue), 채도 (saturation), 명도 (brightness) 2 R, G, B 삼원색을혼합하여표현할수있는색영역은사람의가시색의일부만을포함한다. 3 RGB 색모델은빨강, 초록, 파랑을삼원색으로하는가산색모델이고, CMY 색모델은청록, 자홍, 노랑을삼원색으로하는 감산색모델이다. HSV 색모델은색조채도, 명도로색을표현 한다. 4 많은그래픽스패키지들은현재속성값들의목록을보관하고, 이를갱신할수있는함수를제공한다. 그래픽스기본요소를 그릴때는이속성목록의현재값을적용한다.
정리하기 5 비트맵패턴의채우기는정해진크기의마스크를반복적으로이어붙이는타일붙이기형식으로처리된다. 6 주사선다각형채우기 각각의주사선단위로홀 - 짝규칙을적용한다. 주사선이꼭짓점을만나는경우의처리를위해각변에서 y 축좌표의값이큰꼭짓점좌표는제외한다. 또한수평선분 은처리에서제외한다. 7 경계선채우기알고리듬은정해진색으로되어있는경계로둘러싸인영역내부를지정된색으로채운다. 8 범람채우기알고리듬은동일한색으로되어있는영역을지정된색으로채운다.
정리하기 9 에일리어싱은낮은해상도로인한정보왜곡이다. 래스터그래픽스시스템에서선분이나영역경계가계단형으로출력되는 현상이나타난다. 10 안티에일리어싱은에일리어싱현상을완화하기위한기술로서, 전필터링, 슈퍼샘플링, 후필터링등이있다.