일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CNN
- 머신러닝
- 딥러닝
- 자바
- 파이썬
- CSS
- JSP/Servlet
- 자바 실습
- 컴퓨터구조
- 데이터베이스
- 컴퓨터비전
- 정수와유리수
- 운영체제
- 텍스트마이닝
- pandas
- SQL
- 영어공부
- 데이터입출력구현
- numpy/pandas
- C++
- 중학수학
- html/css
- 중학1-1
- 코딩테스트
- 정보처리기사실기
- 정보처리기사필기
- 연습문제
- 파이썬라이브러리
- 혼공머신
- 데이터분석
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
에지와 영역 11 - 연습문제 풀기 4 : 문제 8~10번 본문
이제 딱 세 문제가 남아있는데 이 문제도 끝까지 잘 풀어보기로 하자.
연습문제 풀기 네 번째
문제 8번
OpenCV가 제공하는 Canny 함수의 선언을 보면, image, edges, threshold1, threshold2, apertureSize, L2gradient, 총 6개의 매개변수가 있다. 각각의 의미를 쓰고, 뒤에 있는 네 매개변수를 변화시키면서 효과를 분석하시오.
문제 풀기
Canny 함수 선언
cv.Canny(image, edges, threshold1, threshold2, apertureSize, L2gradient)
매개변수 설명
- image: 입력 이미지로, 일반적으로 그레이스케일 이미지를 사용한다. 만약 컬러 이미지를 입력으로 제공할 경우, 먼저 그레이스케일로 변환한 후 Canny 함수에 전달해야 한다.
- edges: 출력 이미지로, Canny 함수에 의해 검출된 에지가 저장되는 이진 이미지이다. 검출된 에지는 흰색(255)으로, 나머지 배경은 검은색(0)으로 나타난다.
- threshold1: 에지 검출을 위한 첫 번째 임곗값으로, 하위 임곗값 역할을 한다. 이 값보다 작은 그래디언트 값은 에지로 간주하지 않는다.
- threshold2: 에지 검출을 위한 두 번째 임곗값으로, 상위 임곗값 역할을 한다. 이 값보다 큰 그래디언트 값은 강한 에지로 간주된다. 하위 임곗값과 상위 임곗값 사이의 값은 연결된 강한 에지가 있는 경우에만 에지로 간주된다.
- apertureSize: 소벨 커널의 크기를 설정하는 매개변수이다. 기본값은 3이며, 일반적으로 홀수 값을 사용한다 (3, 5, 7 등). 커널 크기가 클수록 더 많은 주변 정보를 고려하기 때문에 에지가 두꺼워질 수 있다.
- L2gradient: 그래디언트 크기 계산 방식을 결정하는 불리언 값이다.
효과 분석
1. threshold1과 threshold2 (임곗값)
- threshold1 (하위 임곗값)이 낮을수록 약한 에지도 에지로 검출되기 때문에, 더 많은 에지가 검출된다. 하지만 너무 낮게 설정하면 노이즈가 많아져 불필요한 에지가 많이 나타날 수 있다.
- threshold2 (상위 임곗값)이 높을수록 강한 에지 부분만 검출되므로 에지의 양이 줄어들고 선명해진다. 하지만 너무 높게 설정하면 중요한 에지가 누락될 수 있다.
- 일반적으로 두 임곗값은 상호 보완적으로 설정하며, threshold2는 threshold1의 2~3배로 설정하는 경우가 많다.
2. apertureSize (소벨 커널 크기)
- apertureSize가 작을수록, 즉 소벨 커널 크기가 작을수록 에지가 얇게 검출되며, 디테일한 부분이 더 많이 잡힌다.
- apertureSize를 크게 설정하면, 주변 픽셀들의 영향을 더 많이 받기 때문에 에지가 두꺼워지고, 노이즈가 줄어드는 효과가 있다. 그러나 작은 디테일이 사라질 수 있다.
- 일반적으로 3이 기본값으로 설정되어 있으나, 이미지의 디테일이나 노이즈 수준에 따라 5나 7로 설정할 수도 있다.
3. L2gradient (L2 norm 사용 여부)
정리하면
- threshold1과 threshold2: 에지 검출 강도를 조절하며, threshold2를 threshold1의 2~3배로 설정하는 것이 일반적이다.
- apertureSize: 소벨 커널 크기로 에지의 두께와 디테일 수준에 영향을 미친다. 값이 클수록 에지가 두꺼워지고 노이즈가 줄어든다.
- L2gradient: L2 norm을 사용할 경우 그래디언트 계산이 더 정확해지며, 에지 검출 정확도가 향상된다.
문제 9번
프로그램 4-5에서 compactness와 n_segments를 변화시키면서 효과를 분석하시오.
1. compactness의 의미와 효과
- compactness는 색상과 거리의 가중치를 조절하는 파라미터로, 슈퍼픽셀의 모양에 영향을 준다.
- 값이 작을수록 슈퍼픽셀이 더 불규칙하게 형성되며, 이미지의 색상 경계에 더 잘 맞춰지는 형태로 나타난다.
- 값이 클수록 더 둥글고 균일한 형태의 슈퍼픽셀이 형성되며, 색상 경계보다는 위치에 따라 균등하게 클러스터링 된다.
compactness 값 변화에 따른 효과
- 작은 값 (e.g., compactness=10): 슈퍼픽셀의 모양이 더 자연스럽고 색상 경계에 맞춰 불규칙적으로 분할된다. 이미지의 색상 변화에 따라 슈퍼픽셀이 형성되므로, 대상 물체의 외곽선을 더욱 잘 표현할 수 있다. 그러나 슈퍼픽셀의 형태가 일정하지 않고 변형된 모양이 많아질 수 있다.
- 큰 값 (e.g., compactness=50 이상): 슈퍼픽셀이 더 둥글고 고르게 분할되며, 색상 경계보다는 공간적으로 균등하게 나뉜다. 따라서 색상 경계에 덜 민감하며, 각 슈퍼픽셀이 비슷한 크기와 모양을 유지하려고 한다. 하지만 세부적인 경계 정보는 덜 표현되며, 경계가 분명하지 않은 부분에서 모양이 더 단순해질 수 있다.
2. n_segments의 의미와 효과
- n_segments는 생성할 슈퍼픽셀의 개수를 설정하는 매개변수로, 이미지의 세부적인 표현 정도에 영향을 준다.
- 값이 작을수록 슈퍼픽셀의 크기가 커지며, 세부적인 표현이 줄어들어 큰 영역을 가진 단순한 분할이 이루어진다.
- 값이 클수록 더 많은 슈퍼픽셀이 생성되며, 더 작은 세부 영역으로 나뉘어 이미지의 세부적인 특징을 더 잘 표현할 수 있다.
n_segments 값 변화에 따른 효과
- 작은 값 (e.g., n_segments=100): 슈퍼픽셀의 개수가 적어지며, 더 큰 영역으로 분할된다. 이미지의 주요 구조나 큰 객체를 표현하는 데 적합하지만, 세부적인 경계나 작은 물체는 제대로 표현되지 못할 수 있다.
- 큰 값 (e.g., n_segments=1000 이상): 더 많은 슈퍼픽셀이 생성되면서, 이미지가 작은 영역으로 세밀하게 분할된다. 객체의 세부적인 경계를 표현하는 데 유리하며, 작은 특징이나 복잡한 모양도 더 잘 구분할 수 있다. 하지만 세부적인 영역이 많아지면서, 개별 슈퍼픽셀이 지나치게 작아져 실용성이나 효율성이 떨어질 수 있다.
매개변수 변화에 따른 전체 요약
- compactness 증가: 슈퍼픽셀이 더 둥글고 고르게 형성되며 색상 경계에 덜 민감해진다.
- compactness 감소: 슈퍼픽셀이 색상 경계를 따라 불규칙하게 형성되며, 대상의 세부 외곽을 더 잘 표현한다.
- n_segments 증가: 더 많은 슈퍼픽셀이 생성되어 세부적인 특징을 더 잘 표현할 수 있다.
- n_segments 감소: 큰 영역으로 나뉘어 이미지의 주요 구조를 단순하게 표현한다.
이렇게 compactness와 n_segments를 조정하여 원하는 수준의 세부 표현과 슈퍼픽셀 형태를 얻을 수 있다.
값 변화시키기
1. compactness와 n_segments의 기본값 테스트
원래 기본값은 이처럼 세분하게 나누어져 분할된다.
2. compactness를 증가시키고 n_segments를 감소시켜 큰 영역을 둥글게 분할
분할이 좀 더 둥글고 큼직하게 되었음을 확인할 수 있다.
3. compactness를 감소시키고 n_segments를 증가시켜 세밀한 영역 분할
이번에는 훨씬 더 세분화되어 나누어지는 것을 볼 수 있다.
문제 10번
프로그램 4-7은 사용자가 붓칠을 하면 그를 바탕으로 분할을 한 번 하고 종료한다. 마음에 들지 않으면 사용자가 추가로 붓질을 하고 프로그램은 새로 붓칠한 결과를 추가로 반영해 분할하는 일을 반복하도록 프로그램 4-7을 확장하시오.
▶ 힌트 : 54~64행을 함수로 만들고, 44~47행의 while 반복 안에서 이 함수를 호출한다.
문제 풀기
주어진 프로그램 4-7을 확장하여, 사용자가 추가로 붓칠을 한 후 이를 반영해 GrabCut 분할을 반복 수행할 수 있도록 수정해보겠다. 힌트에 따라 GrabCut 적용 부분(54~64행)을 함수로 분리하고, 이 함수를 while 반복문 안에서 호출하여 추가 붓칠을 반영할 수 있도록 한다.
이렇게 붓칠을 하고 r을 누르면서 붓칠이 잘 되었는지 확인할 수 있다.
처음에는 군데군데 분리가 잘 되지 않는 부분이 보였다.
점점 물체와 배경이 분리되고 있다.
최종 붓칠을 완성한 모습이다.
수정된 코드 설명
- apply_grabcut() 함수: GrabCut 알고리즘을 수행하는 코드를 함수로 분리하여, while 반복문 안에서 필요할 때마다 호출할 수 있도록 했다.
- 키 입력 조건 추가: while 반복문에서 r 키를 눌렀을 때 apply_grabcut() 함수를 호출하여, 사용자가 추가로 붓칠한 내용을 반영한 새로운 분할 결과를 확인할 수 있게 했다.
- 동작 흐름:
- 프로그램을 실행한 후 q 키를 눌러 프로그램을 종료할 때까지 r 키를 눌러 새로운 붓칠을 반영한 GrabCut 분할 결과를 반복적으로 확인할 수 있다.
이렇게 확장된 프로그램을 통해 사용자는 원하는 만큼 추가로 붓칠을 한 후 r 키를 눌러 새로운 GrabCut 결과를 확인할 수 있게 된다.
학습을 마치고
이렇게 해서 모든 연습문제를 다 풀어보았다. 정말 어려운 문제들이 많았으나 다 풀고 나니 뿌듯하고 기쁘다. 어제 일찍 취침하고 오늘 새벽에 평소보다 2시간 일찍 일어나 공부를 진행할 수 있어 정말 감사했다. 이번 연습문제도 다 푸는데 5시간 정도 걸린 것 같다. 긴 시간 투자하며 열심히 공부했고 많은 것들을 배웠다. 특히 문제 1번과 2번을 손으로 직접 풀었던 것이 가장 기억에 남는다.
맑은 정신으로 공부하니 집중도 잘 되고 어제는 풀기 싫었던 연습문제도 모두 다 풀어볼 수 있었다. 오늘은 5장과 6장을 넘어 7장도 학습할 예정이라 무척 바쁜 하루가 될 것 같다.
'인공지능 > 컴퓨터 비전' 카테고리의 다른 글
지역 특징 2 - 스케일 불변한 지역 특징과 SIFT (2) | 2024.11.11 |
---|---|
지역 특징 1 - 발상 및 이동과 회전 불변한 지역 특징에 대하여 (1) | 2024.11.11 |
에지와 영역 10 - 연습문제 풀기 3 : 문제 3~7번 (0) | 2024.11.11 |
에지와 영역 9 - 연습문제 풀기 2 : 문제 2번 (0) | 2024.11.10 |
에지와 영역 8 - 연습문제 풀기 1 : 문제 1번 (1) | 2024.11.10 |