전체 글 173

[컴퓨터그래픽스] 영상 워핑(warping)과 모핑(morphing)

영상 워핑 픽셀의 위치를 이동, 픽셀 별로 이동 정도가 다름. 영상 정합(두 영상 간 정합점을 찾는 것)과 함께 사용도 가능함, 역방향 사상은 아니다. 입력 영상을 토대로 출력 영상을 생성하는 것, 슬퍼하는 모나리자 그림 만드는 것 처럼 포인터 대응 매핑 포인터와 거리에 반비례하여 가중치를 반영, 매핑 제어선을 이용한 워핑 모든 픽셀은 제어선에 영향을 받으며 각 픽셀에 대한 제어선의 영향력을 계산하여 워핑을 처리해야 한다. - 수직교차점 내부 : 제어선과의 수직 거리 그대로 사용 - 수직교차점 외부 : 제어선에 포함된 가장 가까운 점과의 직선 거리 특정 픽셀의 특정 제어선에 관한 가중치 계산 : 영상 모핑 두 개의 다른 영상에서 영상 간 중간(꼭 중간이 될 필요는 없음) 단계의 영상을 생성하는 것. 워핑..

컴퓨터공학 2023.04.25

[컴퓨터그래픽스] 기하학적 처리 정리

기하학적 처리 화소들의 위치를 변경 확대 사상을 통한 확대의 문제(화질 저하, 계단 현상)를 해결하기 위해 역방향 사상과 양선형 보간법을 활용 선형 보간법 두 포인트 간 비율 계산을 통해 적절한 값 도출, O = (1-k) * a + (k) * b 양선형 보간법 선형 보간법을 세번 사용, 위 x축과 아래 x축의 선형 보간을 계산하여 두 값의 y축 선형 보간 적용 축소 단순 축소의 경우 원본 픽셀 소실, 축소 전 흐리기 적용(서브샘플링) 또는 평균값 필터링을 통해 어느 정도 데이터 유실 방지 회전 전방향 사상 시, 빈 공간 발생 -> 역방향 사상 및 중심점 기준 회전을 통해 문제를 해결, 회전 각도에 따라 출력영상의 크기는 달라진다. (일반적으로는 다 커짐) 각 회전 계산식 :

컴퓨터공학 2023.04.25

[컴퓨터그래픽스] 영역 기반 처리 방법 정리

회선 영역 기반 처리를 위한 기본적인 기법 M:N 회선 마스크를 통해 영역 처리, 이산 또는 연속적인 영역에 따른 계산 법이 약간 차이가 있음, weighted sum 회선 마스크의 특징 - 마스크의 크기는 홀수 -> 동일한 영역의 크기의 마스크가 모든 화소에 적용되어야 함 - 주로 계수들의 합 1, 일부 마스크는 계수 합이 0 영상의 경계처리 방법 임의로 0 삽입 중첩되는 부분만 회선 처리 원본의 크기 확장(임의 0 삽입이 아닌 가장자기 값 복사 등..) 영역 기반 처리 입력 화소와 주위 화소, 즉 영역 통해 출력 화소 결정. 주변의 픽셀에 영향이 있음 회선 기법을 주로 사용 영상 흐리게 하기 주위 픽셀 값들 차를 줄여서 구현 (나눗셈 회선 마스크) 참고) Gaussian Smoothing : 더 성능..

컴퓨터공학 2023.04.25

[컴퓨터그래픽스] 픽셀 기반 처리 방법 정리

디지털 영상 생성 현실의 영상을 디지털화하기 위해서 샘플링(픽셀)과 양자화(몇 단계의 밝기로 근사화) 두 단계를 통해 생성 샘플링과 양자화에 대한 좋은 유투브 설명 : https://www.youtube.com/watch?v=JPdMQ9-wJyw 컬러 모델 다양한 분야에 맞는 컬러 모델 존재, CMY, RGB, HSI 등 다양한 컬러 모델 존재 HSI (색상, 채도, 명도) 많은 영상처리에서 HSI 모델 사용 -> RGB모델을 HSI모델로 변환해야 함 픽셀 기반 처리 그래픽의 픽셀을 변경하는 처리, 다른 픽셀에 영향 없음 산술 연산 각 픽셀에 일정한 값을 + - * % (산술 연산) 영상의 밝기 조절 : 덧셈, 뺄셈 영상의 명암 대비 조절 : 곱셈, 나눗셈 나눗셈을 하는 경우 픽셀 간 오차가 상대적으로 ..

컴퓨터공학 2023.04.25

[OpenGL] 변환 (회전, 이동, 크기 변경)

변환 행렬 초기화 OpenGL에서는 아래와 같은 변환을 위해 변환행렬을 사용합니다. 만일 이전에 사용한 병환 행렬을 초기화하지 않으면 원하는 결과가 나오지 않을 수 있습니다. 아래 함수 호출을 통해 변환 행렬을 항등 행렬로 초기화합니다. glLoadIdentity(); 회전 (Rotation) 기존 위치 기준 0.0 이 아닌 축을 기준으로 주어진 각도만큼 회전합니다. 일반적으로 z축을 기준으로 회전시킵니다. glRotatef(각도, x, y, z); 이동 (Translation) 기존 위치 기준 (일반적으로 중심점)에서 각 좌표계에서 입력한 파라미터 만큼 입력합니다. glTranslatef(x, y, z) 크기 조정 (Scaling) 해당 좌표계의 값이 1.0이 아니면 지정한 비율만큼 확장, 축소합니다...

소프트웨어 2023.04.24

[OpenGL] 삼각형 그리기

일반 삼각형 일반적인 삼각형을 생성합니다. GL_TRIANGLES를 파라미터로 받습니다. glBegin(GL_TRIANGLES); glVertex3f(x1, y1, z1); glVertex3f(x2, y2, z2); glVertex3f(x3, y3, z3); glEnd(); 삼각형 스트립 여러 개의 삼각형으로 이루어진 스트립을 생성합니다. GL_TRIANGLE_STRIP 파라미터를 사용합니다. glBegin(GL_TRIANGLE_STRIP); glVertex3f(x1, y1, z1); glVertex3f(x2, y2, z2); glVertex3f(x3, y3, z3); glVertex3f(x4, y4, z4); glVertex3f(x5, y5, z5); glEnd(); 삼각형 팬 하나의 중심점을 기준으로..

소프트웨어 2023.04.24

[컴퓨터그래픽스] 히스토그램 평활화 vs 명암 대비 스트레칭

둘 다 기존 이미지 명암을 개선하기 위해 사용하는 이미지 처리 기법인데, 두 기법의 차이는 무엇인가요? 유투브에서 이해하기 좋은 내용을 보고 블로그 글로 작성합니다. 히스토그램 평활화 (Histogram Equalization) 기존 영상의 명암 값 분포를 재분배하여 일정한 분포(주로 정규분포)를 가진 새 히스토그램을 생성합니다. 평활화 단계 1. 입력 영상의 히스토그램 생성 2. 빈도수의 누적값 계산 3. 누적값 정규화 (N은 전체 픽셀 수 입니다.) 4. 정규화한 값을 통해 영상 생성 명암 대비 스트레칭 (Contrast stretching) 기존 영상의 분포 형태를 유지하되, 최댓값과 최솟값을 활용하여 스트레칭합니다. 주로 중앙에 빈도수가 몰려있는 영상을 처리할 때 유용한 기법입니다. 계산 두 기법..

컴퓨터공학 2023.04.19

[프로그래머스] 게임 맵 최단거리

접근 DFS 또는 BFS로 풀 수 있지만 DFS로 풀었다가는 TLE에 걸릴 수 있다는 점에 명심해야 한다. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/1844 솔루션 def solution(maps): ROW_length = len(maps) COL_length = len(maps[0]) visited = [[False for _ in range(COL_length)] for _ in range(ROW_length)] queue = [[0,0,1]] while queue: ROW, COL, DIST = queue.pop(0) # 조건에 맞지 않는 경우는 모두 추가 탐색하지 않습니다. if ROW ROW_leng..

[Kotlin] 코틀린 Nullability

해당 변수가 Null 임을 확인하기 위해 다른 언어는 조건문 등을 통해 null exception을 잡아주어야 합니다. 간단한 소프트웨어 개발에는 크게 문제가 되지 않지만 규모가 커지면서 예외처리를 잡아주기 위한 코드는 배가 됩니다. 코드의 가독성과 효율이 낮아집니다. 이러한 문제를 코틀린에서는 MZ하게 해결합니다. null 가능한 변수 선언 코틀린에선, 일반적인 변수 선언 후 값으로 null 을 저장할 수 없습니다. fun main() { val name: String = null } // 에러 : Null can not be a value of a non-null type String 그러나 ? 연산자를 변수 선언 시 같이 작성하는 경우 null 또한 저장이 가능합니다. fun main() { val..