컴공지식
-
Global Thresholding이란컴공지식/컴퓨터비전 2024. 10. 2. 21:41
Global Thresholding이란 이미지 전체에 하나의 임계값(Threshold)을 정해서 이미지를 나누는 방법이다. 기본 방법은 초기 임계값(T)을 설정한다. 대충 처음에 값 하나 잡는 거다. 그 임계값(T)을 사용해서 이미지를 두 그룹으로 나눈다. 하나는 객체, 나머지는 배경각 그룹의 평균 값(m1, m2)을 계산한다. 새로운 임계값을 T = 0.5 * (m1 + m2)로 계산한다. 즉, 두 그룹의 평균을 더하고 반으로 나누는 거다.마지막으로, 2~4단계를 반복해서 임계값이 더 이상 크게 변하지 않을 때까지 계산한다. 또한 Otsu's method를 이용해 글로벌 쓰레솔딩을 찾을 수 있느데 이는 이미지에서 최적의 임계값을 자동으로 찾아주는 방법이다.이 방법을 통해 클래스들(객체와 배경)이 명확하..
-
함수 정의하기컴공지식/프로그래밍언어론 2024. 9. 28. 19:56
함수를 정의하기 위해선 구체적인(concrete) 문법과 추상적인(abstract) 문법을 정의해야 한다.구체적인 문법은 프로그래밍 언어에서 실제로 작성되는 코드 형태이고 추상적인 문법은 코드를 프로그램 내부에서 어떻게 해석하고 처리하는지에 대한 구조다. 우리는 지금까지 단순한 연산 과정인 AE를 거쳐 with를 쓰는 WAE까지 알아봤다.이제 함수가 추가된 형태인 F1WAE를 알아볼 차례이다.이 F1WAE에서는 함수를 다음과 같이 정의할 수 있다.{deffun {twice x} {+ x x}}twice라는 함수를 만든건고, 옆의 x는 파라미터가 된다.그 옆의 괄호는 x와 x를 더하는거다. 그러니 만약 {twice 2}라는 함수가 있다면 4가 반환되는거다. 아무튼 함수 정의는 위처럼 {deffun {id ..
-
XML 네임스페이스컴공지식/웹 2024. 9. 27. 13:28
XML 네임스페이스는 XML 문서에서 요소와 속성 이름의 충돌을 방지하기 위해 사용된다.서로 다른 출처에서 정의된 요소들을 하나의 문서에서 사용할 때, 각 요소가 어떤 출처에서 사용되는지를 구분한다.이를 통해 동일한 이름의 요소를 동시에 사용할 수 있게 하며, XML 문서의 가독성과 유지보수성을 높이는 역할을 한다. 네임스페이스는 xmlns 속성을 사용하여 선언된다.네임스페이스를 사용하는 방식은 프로그래밍 언어에서 라이브러리나 모듈을 import하여 사용하는 것과 비슷한 개념이다.프로그래밍에서 외부 라이브러리를 불러와 특정 기능을 사용할 때 import를 사용하는 것처럼, XML에서도 네임스페이스를 사용하여 서로 다른 출처에서 정의된 요소들을 문서에서 함께 사용한다. http://www.w3.org/TR..
-
XML DTD 정의컴공지식/웹 2024. 9. 26. 21:45
XML DTD는 대충 이렇게 생겼다.letter (contact+, salutation, paragraph, closing, signature)> 여기서 ELEMENT는 XML에서 사용하는 요소를 정의할 때 쓴다.letter과 salutation이 있는데 이들이 요소의 이름이 된다. contact 뒤에 +가 있는데, 이는 이 요소를 적어도 1개 이상은 써야한다는 의미다. 프로그래밍 언어론에서 다뤘던 기호 같다..letter가 다양한 요소들을 감싸고 있는데 이는 감싸고 있는 요소들을 포함할 수 있다는 의미다.salutation이 감싸고 있는 #PCDATA는 그냥 텍스트를 뜻한다.salutation 안에는 텍스트를 작성할 수 있다는 뜻이다.안녕처럼 말이다. 그리고 다음과 같은 DTD의 정의가 있는데conta..
-
HoughLines랑 HoughLinesP의 차이컴공지식/컴퓨터비전 2024. 9. 25. 23:44
결과 값 차이로는 HoughLines()는 직선의 방정식을 찾아준다. 즉, 직선의 기울기와 거리를 찾는 거다.vector 형식의 벡터로 결과를 반환한다.여기서 Vec2f는 두 개의 실수 값(소수점 포함)으로 이루어진 벡터인데, rho와 theta 값을 나타낸다.요약하자면, HoughLines는 감지된 직선의 거리와 각도 정보를 주는 거다.직선이 어느 방향으로, 얼마나 떨어져 있는지를 알 수 있다. HoughLinesP()는 확률적 허프 변환(Probabilistic Hough Transform) 을 사용해서 직선을 찾는다.이 방법은 더 효율적이고, 직선의 시작점과 끝점 좌표를 직접 제공한다.vector 형식의 벡터로 결과를 반환한다.Vec4i는 4개의 정수 값으로 이루어진 벡터인데, 직선의 두 좌표를 나..
-
HoughLinesP를 사용한 확률적 허프 변환 코드컴공지식/컴퓨터비전 2024. 9. 25. 23:40
이 방법은 직선 검출을 할 때 더 효율적이고, 직선의 시작점과 끝점을 직접 제공해주는 장점이 있다.int main() { Mat image, edge, result; vector lines; // 직선의 시작점과 끝점을 저장할 벡터 image = imread("chess_pattern.png"); // 이미지 불러오기 result = image.clone(); // 원본 이미지를 복사하여 결과 저장 cvtColor(image, image, CV_BGR2GRAY); // 컬러 이미지를 그레이스케일로 변환 Canny(image, edge, 50, 200, 3); // Canny 엣지 검출 수행 // 확률적 허프 변환을 이용해 직선 감지 // ..
-
HoughLines를 이용한 직선 감지 코드컴공지식/컴퓨터비전 2024. 9. 25. 23:37
int main() { Mat image, edge, result; float rho, theta, a, b, x0, y0; Point p1, p2; vector lines; // 직선을 저장할 벡터 image = imread("chess_pattern.png"); // 이미지 불러오기 result = image.clone(); // 원본 이미지를 복사하여 결과 저장 cvtColor(image, image, CV_BGR2GRAY); // 컬러 이미지를 그레이스케일로 변환 Canny(image, edge, 50, 200, 3); // Canny 엣지 검출 수행 // Hough 변환을 이용해 직선 감지 // edge: 입력 엣지..
-
Canny 엣지 검출기 구현컴공지식/컴퓨터비전 2024. 9. 25. 23:32
int main() { Mat image, canny; image = imread("lena.png", 0); // 이미지를 흑백으로 불러옴 // Canny 엣지 검출 수행 // image: 입력 이미지, canny: 출력 이미지 // 190: 낮은 임계값 (low threshold) // 200: 높은 임계값 (high threshold) // 3: Sobel 연산에 사용할 커널 크기 Canny(image, canny, 190, 200, 3); // 결과 출력 imshow("Input image", image); imshow("canny", canny); waitKey(0); // 키 입력 대기 } 여기서 주의깊..