-
Notifications
You must be signed in to change notification settings - Fork 0
Scan Image, LUT
우리는 다음 질문에 대한 해답을 찾을 것 입니다.
- 어떻게 이미지로부터 모든 픽셀을 살펴볼수 있을까요?
- 어떻게 OpenCV 행렬 값을 저장할까요?
- 어떻게 알고리즘 성능을 측정할까요?
- LUT(Look Up Table)이란 무엇이며 왜 LUT를 사용할까요?
간단한 색상 감소 방법을 고려해보겠습니다. 행렬 아이템 저장을 위해 C나 C++ unsigned char타입을 사용하면 픽셀 체널에 최대 256개의 서로다른 값이 있을수 있습니다. 3채널 이미지의 경우 너무 많은 색상(정확히는 1600만)을 형성 할 수 있습니다. 너무 많은 색조로 작업하면 알고리즘 성능에 큰 저하를 줄 수 있습니다. 그러나 때로는 동일한 결과를 얻기에 훨씬 적게 작업하는 것으로도 충분합니다.
이 경우 색상 공간을 줄이는 것이 일반적입니다. 이는 색상 공간의 현재 값을 새로운 입력 값으로 나누어 더 적은 색상으로 끝남을 의미합니다. 예를 들어 0에서 9사이의 모든 값은 새 값0을 취하고 10에서 19사이의 모든 값은 10을 취합니다.
uchar(unsigned char: 0~255사이의 다른 값) 값을 int값으로 나눌 때 결과도 char입니다. 이 값은 char값일 수 있습니다. 따라서 모든 소수는 내림됩니다. 이 사실을 이용하여 uchar 정의역의 상위 연산은 다음과 같이 표현 될 수 있습니다.
간단한 색상 공간 감소 알고리즘은 그저 이미지 행렬의 모든 픽셀에 거쳐 이 수식을 적용하는 것으로 구성됩니다. 우리가 나누기와 곱셈 연산을 한다는 것은 주목할 가치가 있습니다. 이러한 작업은 시스템 비용이 많이 듭니다. 가능하다면 몇 가지 뺄셈, 더하기 또는 최선의 경우 간단한 할당과 같은 더 저렴한 연산을 사용하여 피할 가치가 있습니다. 또한, 상위 연산에 대한 입력 값의 수는 제한되어 있습니다. uchar 시스템의 경우 이것은 정확히 256입니다.
따라서 큰 이미지의 경우 사전에 가능한 모든 값을 계산하고 할당 도중 LUT(Look Up Table)을 사용하여 할당 하는것이 좋습니다. LUT는 주어진 입력 값 변형에 대해 최종 출력 값을 보유하는 단순 배열 (하나 이상의 차원 포함)입니다. 강점은 우리가 계산을 할 필요가 없다는 것입니다. 우리는 단지 결과만 읽는것이 필요할 뿐이다.
우리의 테스트 케이스 프로그램(그리고 여기에 제시된 샘플)은 다음을 따라할 것입니다: 콘솔 라인 이미지 요소(컬러 또는 그레이 스케일 수도 있다)를 읽고 주어진 콘솔 라인 정수 요소들의 감소를 적용한다. OpenCV에서는 현재 픽셀 단위로 이미지를 통과하는 세 가지 주요 방법이 있습니다. 조금더 재미있게 만들기 위해 모든 방법을 사용하여 각 이미지를 스캔하고 사용된 시간을 출력하십시오.
여기에서 전체 소스 코드를 다운로드하거나 OpenCV의 심플 디렉토리에서 코어 섹션에 대한 C++자습서 코드를 찾아 볼 수 있습니다.
코드에대한 상세한 설명은 여기를 참고하세요 😈
how_to_scan_images imageName.jpg intValueToReduce [G]
