opencv 3/C+이산 코사인 변환 DCT 방식

이산 코사인 변환/Discrete cosine transform,
분 산 된 푸 리 엽 변환 의 성질 에 따라 실제 함수 의 푸 리 엽 변환 은 실제 코사인 만 포함 하고 디지털 이미 지 는 모두 실수 행렬 이기 때문에 실수 역 의 변환―분 산 된 코사인 변환(DCT)을 구성 했다.
이산 코사인 변환 은 매우 강 한'에너지 집중'특성 을 가지 고 왼쪽 위 는 저주파 데이터 라 고 부 르 고 오른쪽 아래 는 고주파 데이터 라 고 부른다.대부분의 자연 신호(소리 와 이미지 포함)의 에 너 지 는 분 산 된 코사인 변환 후의 저주파 부분 에 집중 된다.따라서 이미지 압축 알고리즘 에서 손실 압축 을 할 수 있 습 니 다.(JPEG 압축 코드 와 같이)
OpenCV 에서 dct()
OpenCV 에는 이산 여현 변환 을 전문 으로 하 는 함수 dct()가 있다.
dct()함 수 는 1D 또는 2D 부동 소수점 배열 의 정방 향 또는 역방향 분산 코사인 변환(DCT)을 실행 합 니 다.
N 개 원소 의 1 차원 벡터 의 정 여현 변환:

이 함 수 는 입력 배열 의 표지 와 크기 를 보고 작업 모드 를 선택 합 니 다:
하면,만약,만약...INVERSE)==0 이면 함수 가 앞으로 1D 또는 2D 변환 을 수행 합 니 다.그렇지 않 으 면 역 1D 나 2D 변환 입 니 다.
하면,만약,만약...ROWS)!= 0,함수 가 줄 마다 1 차원 변 화 를 실행 합 니 다.
배열 이 단일 열 이나 단일 줄 이 라면 이 함 수 는 1 차원 변환 을 실행 합 니 다.
이상 이 아니라면 이 함 수 는 2D 변환 을 실행 합 니 다.
현재 dct 는 짝수 크기 의 배열(2,4,6...)을 지원 합 니 다.데이터 분석 과 접근 에 대해 필요 할 때 배열 을 채 울 수 있다.또한 함수 성능 은 단조 로 운 것 이 아니 라 배열 크기 에 대한 의존 도가 매우 크다.현재 구현 에서 크기 가 N 인 벡터 의 DCT 는 크기 가 N/2 인 벡터 의 DFT 를 통 해 계산한다.따라서 최 적 DCT 크기 N1>=N 은 다음 과 같이 계산 할 수 있다.

size_t getOptimalDCTSize(size_t N){return 2 * getOptimalDFTSize((N + 1)/ 2); }
N1 = getOptimalDCTSize(N);
dct()매개 변수
src 입력 부동 소수점 배열.
dst 출력 은 src 크기 와 유형 이 같은 배열 입 니 다.
플래그 변환 표지
opencv 예제

#include <opencv2\opencv.hpp> 
#include <opencv2\core\core.hpp>
#include <opencv2\core\mat.hpp>
#include <iostream> 
using namespace std; 
using namespace cv; 
int main()
{
 Mat src = imread("E:\\image\\sophie.jpg", 0); 
 if(src.empty())
 {
  cout << "the image is not exist" << endl; 
  return -1;
 }
 resize(src, src, Size(512, 512));
 src.convertTo(src, CV_32F, 1.0/255);
 Mat srcDCT; 
 dct(src, srcDCT);

 imshow("src", src);
 imshow("dct", srcDCT);
 waitKey();
 return 0;
}
첫 번 째 그림 의 디 테 일이 적 기 때문에 DFT 변환 데 이 터 는 주로 왼쪽 위(저주파 구역)에 집중 되 고 고주파 구역 은 대부분 0 이다.


두 번 째 그림 은 상대 적 으로 풍부 한 디 테 일 을 가지 기 때문에 첫 번 째 그림 중간 구역 에 비해 대량의 비 0 값 이 나 타 났 다.


이상 의 opencv 3/C++이산 코사인 변환 DCT 방식 은 바로 소 편 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기