산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> MATLAB

MATLAB 2D 역 코사인 변환(IDCT): 주파수 데이터에서 이미지 복원하기

역 코사인 변환(Inverse Cosine Transform, ICT 또는 IDCT)은 코사인 변환의 역연산입니다. 신호 및 이미지 처리에서 주파수 영역 표현으로부터 신호나 이미지를 재구성하는 데 특히 유용합니다.

2D 신호나 이미지 맥락에서 2D 역 코사인 변환(2D IDCT)은 코사인 계수 행렬(신호/이미지의 주파수 성분 표현)을 공간 영역으로 변환해 원래 신호나 이미지를 복원합니다.

MATLAB에서 2D 역 코사인 변환은 코사인 값 행렬을 공간 영역 이미지로 변환하는 데 사용됩니다. 2D 코사인 변환의 역연산으로 이미지 처리와 압축에 흔히 쓰입니다. `idct2` 함수가 이 연산을 수행합니다.

2D 역 이산 코사인 변환

MATLAB에서 `idct2` 함수는 2D 역 코사인 변환을 수행합니다. 코사인 계수 행렬을 입력받아 신호나 이미지의 공간 영역 표현을 반환합니다. 결과는 표시하거나 추가 처리할 수 있는 재구성된 이미지입니다.

역 코사인 변환은 이미지 압축(JPEG 등), 이미지 재구성, 주파수 영역 조작 후 원래 형태로 복원해야 하는 신호 처리 작업에서 중요합니다.

문법

B = idct2(A)
B = idct2(A,m,n)
B = idct2(A,[m n])

문법 설명

예제 1: idct2()로 이미지 고주파 제거(로우패스 필터링)

img = imread('autumn.tif');
% 그레이스케일 변환
if size(img, 3) == 3
    img = rgb2gray(img);
end
% 2D DCT 계산
dct_img = dct2(double(img));
% 고주파 제거: 처음 50개 계수만 유지
threshold = 50;
dct_img_thresh = dct_img;
dct_img_thresh(threshold+1:end, :) = 0;
dct_img_thresh(:, threshold+1:end) = 0;
% 역 2D DCT로 필터링된 이미지 복원
filtered_img = uint8(idct2(dct_img_thresh));
% 원본과 필터링 이미지 표시
figure;
subplot(1, 2, 1); imshow(img); title('Original Image');
subplot(1, 2, 2); imshow(filtered_img); title('Filtered Image');

설명: `imread`로 이미지 읽기 → 그레이스케일 변환 → `dct2`로 주파수 영역 변환 → 임계값(50) 이상 고주파 계수 0으로 설정 → `idct2`로 공간 영역 복원 → 결과 비교 표시

예제 2: B = idct2(A, m,n)으로 이미지 리사이징

img = imread('autumn.tif');
if size(img, 3) == 3
    img = rgb2gray(img);
end
dct_img = dct2(double(img));
% DCT 계수 행렬을 절반 크기로 리사이즈
new_size = size(img) / 2;
dct_resized = imresize(dct_img, new_size);
% 역 2D DCT로 리사이즈된 이미지 복원 (원본 크기로)
resized_img = uint8(idct2(dct_resized, size(img, 1), size(img, 2)));
subplot(1, 2, 1); imshow(img); title('Original Image');
subplot(1, 2, 2); imshow(resized_img); title('Resized Image using 2-D IDCT');

설명: DCT 계수 행렬을 주파수 영역에서 리사이즈한 뒤 `idct2`로 공간 영역 복원. 출력 크기(m,n)를 원본 크기로 지정해 업샘플링 효과

예제 3: 2D IDCT로 행렬 리사이징 (3×2로 변경)

% 4×4 샘플 행렬 A 생성
A = [10, 20, 30, 40; 50, 60, 70, 80; 90, 100, 110, 120; 130, 140, 150, 160];
disp('Original Matrix A:'); disp(A);
% 2D IDCT 적용 후 3×2로 리사이즈
B = idct2(A, [3, 2]);
disp('Resized Matrix B (3x2):'); disp(B);

출력:

Original Matrix A:
10 20 30 40
50 60 70 80
90 100 110 120
130 140 150 160
Resized Matrix B (3x2):
122.0957  -11.9692
-97.4491    1.6910
12.0957    -1.9692

MATLAB

  1. MATLAB 데이터 가져오기: 외부 파일 효율적으로 로드하기
  2. MATLAB 의사결정 구조 마스터: 종합 가이드
  3. MATLAB 벡터 마스터: 행 벡터와 열 벡터 기초
  4. MATLAB 함수 그래프 그리기: 단계별 완벽 가이드
  5. MATLAB 콜론 연산자 마스터하기: 벡터 생성과 효율적 반복
  6. MATLAB 다항식 미분 효율 계산 가이드: polyder 함수 완전 정복
  7. MATLAB 기초 마스터: 필수 구문 및 명령어
  8. 효율적인 계산을 위한 필수 MATLAB 명령어
  9. Simulink: MATLAB의 고급 시뮬레이션 및 모델 기반 설계 도구
  10. MATLAB 다항식 이해: 표현, 평가, 근 찾기, 곡선 피팅