이산 웨이블릿 변환(DWT)이란? AI에서 신호와 이미지를 여러 크기의 변화로 나누는 방법
TL;DR
이산 웨이블릿 변환(DWT)은 신호나 이미지의 국소적인 변화를 여러 크기의 근사·상세 계수로 나누는 수치 변환입니다. 낮은 대역과 높은 대역을 분리하고 표본 수를 줄이는 필터 묶음을 사용합니다.[6][7] 변환 자체가 잡음을 판별하거나 AI를 학습하지는 않습니다. 웨이블릿 종류·분해 단계·끝값 처리와 역변환을 맞추고 계수를 바꾼 뒤 사라지는 단서를 따로 확인합니다.
핵심 3줄 요약
- 핵심 1
큰 흐름과 작은 변화를 나눕니다. 근사 계수와 상세 계수는 같은 원본을 다른 대역으로 표현한 값입니다. - 핵심 2
근사 대역을 다시 분해합니다. 일반적인 다단계 DWT는 앞 단계의 근사 계수에서 더 큰 규모의 변화를 봅니다. - 핵심 3
변환과 손실 처리는 별개입니다. 계수 축소·제거와 역변환의 효과를 원본 및 후속 AI 오류로 확인합니다.
이 글에서 다룰 내용
- 이산 웨이블릿 변환의 한 문장 정의
- 네 표본으로 보는 하르 변환과 복원
- 저역·고역 필터와 다단계 분해의 순서
- PyWavelets의 단계·끝값·축·출력 길이
- DCT·FFT·평활 필터와의 차이
- 신호·영상 전처리의 사용처와 체크리스트
- 작은 신호 손실·이동·표시 정규화의 주의점
이산 웨이블릿 변환을 한 문장으로 정의하면 무엇인가요?
이산 웨이블릿 변환은 서로 짝을 이루는 저역·고역 필터와 다운샘플링으로 데이터를 근사 성분과 상세 성분으로 나누는 다중 해상도 표현입니다.
영문명은 Discrete Wavelet Transform이며 DWT로 줄여 씁니다. 웨이브릿이라는 표기도 보입니다. 이 글은 실수 신호의 일반적인 이산 분해를 중심으로 설명합니다. PyWavelets의 분해 개요는 단계마다 근사 대역을 다시 나누는 구조를 안내합니다.[6]
근사 계수는 비교적 완만한 흐름을 담고 상세 계수는 해당 규모에서의 차이를 담습니다. 여기서 상세는 중요한 정답만 모았다는 뜻이 아닙니다. 작은 결함과 잡음이 같은 대역에 함께 놓일 수 있으므로 어느 쪽인지 원본과 대조합니다.
한 줄 정리: DWT는 한 배열을 여러 규모와 위치의 변화로 다시 적습니다. 각 계수는 물체 이름이나 이상일 확률이 아닙니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 시간 순서의 네 표본
[2,4,6,8]
을 살핀다고 가정해 보겠습니다. 정규직교 하르 변환에서 이웃 두 값의 합과 차이를 각각 2의 제곱근으로 나눕니다. 실제 장비 기록이 아닌 원리 설명용 배열입니다.
합으로 얻은 근사 계수는 약
[4.2426,9.8995]
이고 차이로 얻은 상세 계수는 약
[-1.4142,-1.4142]
입니다. 근사 계수는 원래 쌍의 평균 3과 7 자체가 아니라 평균에 2의 제곱근을 곱한 값입니다. 상세 계수의 부호는 쌍 안의 변화 방향을 남깁니다.
두 배열을 모두 사용해 되돌리면 원래 네 표본이 복원됩니다. 상세 계수만 0으로 바꾸면 복원값은
[3,3,7,7]
이 되고 이 예시의 평균제곱오차는 1입니다. 각 쌍의 평균은 남지만 쌍 안의 차이는 사라졌습니다.
근사 계수 두 개를 다시 같은 규칙으로 나누면 두 번째 단계의 근사는
[10]
, 상세는
[-4]
입니다. 두 번째 단계 상세와 첫 번째 단계 상세를 모두 보관하면 원래 배열로 돌아갈 재료가 남습니다.
이 수치는 Python 표준 라이브러리로 합·차·제곱근과 역산을 검산한 설명용 계산입니다. PyWavelets 함수를 실행하거나 실제 영상의 잡음 제거·분류 정확도를 측정한 결과는 아닙니다. 다른 웨이블릿의 필터와 끝값 처리까지 재현한 값으로 제시하지 않습니다.
쉬운 예시: 먼저 가까운 두 값의 공통 흐름과 차이를 나누고, 공통 흐름끼리 다시 비교합니다. 작은 차이와 더 큰 구간의 차이가 서로 다른 단계에 남습니다.
왜 AI에서 이산 웨이블릿 변환이 중요한가요?
한 가지 크기로 보기 어려운 변화를 나눕니다
짧게 튀는 신호와 천천히 바뀌는 흐름을 같은 표현 안에서 살필 때 검토합니다. 단계와 위치가 구분된 계수를 만들면 어떤 규모의 변화가 후속 분류에 도움이 되는지 비교할 후보가 생깁니다. 규모별 계수를 계산한 일과 의미를 판정한 일은 나눠 기록합니다.
정보를 줄이는 위치를 확인합니다
공식 분해 개요는 자연 영상의 많은 계수가 0에 가까워지는 성질을 압축·복원에 활용한다고 설명합니다.[6] 계수를 줄이는 규칙을 따로 두면 무엇을 버렸는지 추적하기 좋습니다. 하지만 작은 계수가 실제 작업에서도 불필요하다는 보장은 없습니다.
핵심 인사이트: 덜 복잡한 계수나 매끈한 복원 그림만으로 전처리를 채택하지 않습니다. 작은 사건과 가는 획이 남는지 후속 작업에서 확인합니다.
이산 웨이블릿 변환은 어떤 순서로 작동하나요?
1. 웨이블릿과 입력 축을 정합니다
하르, 도브시 등의 종류에 따라 분해·복원 필터와 길이가 달라집니다. 웨이블릿 객체 문서는 저역·고역 분해 필터와 저역·고역 복원 필터를 구별합니다.[7] 여기의 예시는 짧은 하르 필터만 사용한 계산이므로 모든 종류가 이웃 두 값의 평균·차이와 같다고 일반화하지 않습니다.
2. 두 대역으로 나누고 표본을 줄입니다
저역 필터와 고역 필터의 결과를 각각 다운샘플링해 근사와 상세 계수를 만듭니다. 이때 다운샘플링은 원본에서 짝수 번째 값만 무작정 버리는 전처리와 다릅니다. 대응하는 두 분기와 복원 필터를 함께 설계한 구조로 이해합니다.[6][7]
3. 근사 대역을 더 큰 규모로 분해합니다
일반적인 다단계 분해는 첫 단계 상세를 보관하고 근사만 다시 나눕니다.
wavedec
의 결과는 마지막 단계 근사가 먼저 나오고 상세는 깊은 단계부터 첫 단계까지 이어집니다. 두 단계라면
[cA2,cD2,cD1]
입니다. 첫 번째 상세를 가장 짧은 규모의 정보로 구분합니다.[1]
4. 계수 처리와 역변환을 분리합니다
원본 복원이 목표면 모든 분기와 설정을 그대로 유지합니다. 잡음을 줄이려면 별도의 임계값 규칙으로 계수를 바꾼 뒤 역변환합니다. 이 규칙이 원래 신호까지 바꿀 수 있으므로 처리 전 계수도 함께 보관합니다.[2][5]
실전 팁: 원본, 전체 계수, 수정한 계수와 복원 배열을 따로 저장하세요. 그림의 밝기를 맞추려고 정규화한 계수를 복원 입력으로 덮어쓰지 않습니다.
주요 설정과 결과는 어떻게 읽나요?
웨이블릿과 끝값 처리는 서로 다른 설정입니다
pywt.dwt(x,"haar")
는 하르 웨이블릿의 한 단계 분해를 지정한 예시입니다. 기본
mode="symmetric"
는 신호 양끝을 대칭으로 확장하는 규칙이며 기본
axis=-1
은 마지막 축입니다. 웨이블릿 이름은 필수로 고르고 처리할 축이 실제 시간축인지 확인합니다.[1][3]
mode="reflect"
는 끝 표본을 반복하는 symmetric과 대칭 기준이 다릅니다.
mode="periodic"
과
mode="periodization"
도 같은 이름의 별칭이 아닙니다. 후자는 계수 수를 최소화하는 별도 방식이며 홀수 길이를 먼저 짝수 길이로 확장합니다. 역변환도 같은 모드를 맞춥니다.[3]
출력 길이는 항상 원본의 절반이 아닙니다
원본 길이를 N, 분해 필터 길이를 L이라고 하면 periodization을 제외한 각 분기의 길이는
floor((N+L-1)/2)
입니다. periodization에서는
ceil(N/2)
입니다. 두 분기를 합친 개수와 한 분기의 길이를 혼동하지 않습니다.[1]
공식 길이식으로 N이 8이고 L이 4인 경우를 계산하면 symmetric의 두 분기는 각각 5개, periodization은 각각 4개입니다. 원본이 7개면 periodization의 두 분기는 각각 4개입니다. 변환만 했다고 데이터 개수나 파일 크기가 무조건 절반으로 줄지는 않습니다.
분해 단계와 역변환 함수의 계약을 맞춥니다
level=2
는 두 단계 분해이지 웨이블릿의 종류나 분류 클래스 수가 아닙니다.
dwt_max_level
은 입력과 필터 길이로 끝값 영향이 없는 계수가 적어도 하나 남는 최대 유용 단계를 구합니다. 더 깊은 분해가 더 좋은 표현이라는 품질 점수는 아닙니다.[1]
한 단계
idwt
는 두 분기 중 하나에
None
을 주면 같은 모양의 0 배열처럼 처리합니다. 반면 다단계
waverec
는 계수 목록의 항목을 지우거나 None으로 바꾸는 방식은 지원하지 않습니다. 제외할 대역은 같은 모양·자료형의 0 배열로 남깁니다.[2]
이미지는 공간 두 축과 방향 이름을 확인합니다
dwt2
는
(cA,(cH,cV,cD))
형태로 근사와 세 방향 상세를 반환합니다. 기본
axes=(-2,-1)
은 마지막 두 축입니다. 높이·너비·채널 순서라면 공간 축만 처리하려는 목적에 맞게
axes=(0,1)
을 명시합니다.[4]
문서의 수평·수직 명칭은 배열 축 규약을 따릅니다. 일반적인 화면 표시의 가로·세로 해석과 다를 수 있으므로 cH라는 글자만 보고 검출한 선의 방향을 확정하지 않습니다. 원본의 가로·세로 줄무늬로 각 분기의 응답을 확인합니다.[4]
임계값 함수의 mode는 계수 축소 방식입니다
threshold
의
mode="hard"
는 절댓값이 임계값보다 작은 계수를 기본 0으로 바꾸고 나머지를 유지합니다. 기본
mode="soft"
는 작은 값을 없애는 데 더해 남은 크기도 임계값만큼 줄입니다. 이 mode는 DWT의 끝값 처리 mode와 다른 계약입니다.[5]
설명용 계수
[-3,-2,-1,0,1,2,3]
에 임계값 2를 적용하면 hard는
[-3,-2,0,0,0,2,3]
, soft는
[-1,0,0,0,0,0,1]
입니다. 임계값과 같은 절댓값의 처리까지 구별합니다. 임계값의 수치는 계수의 척도와 선택한 대역에 맞춰 정합니다.
이산 웨이블릿 변환과 헷갈리는 용어는 무엇이 다른가요?
DCT·FFT와의 차이
이산 코사인 변환(DCT)은 정한 구간 전체의 코사인 패턴별 계수를 구합니다. 고속 푸리에 변환(FFT)는 DFT의 효율적인 계산법입니다. 이 글의 DWT는 국소 필터 분기와 단계별 위치를 남깁니다. 앞쪽 계수 몇 개라는 말만으로 서로 같은 대역·위치라고 보지 않습니다.
평활 필터·학습된 특징과의 차이
평활 필터는 주변값을 섞어 출력 신호를 부드럽게 합니다. DWT는 근사와 상세를 모두 보관해 복원할 재료를 만듭니다. 근사만 남겨 복원한 결과는 전체 변환 결과와 구분합니다. 신경망의 학습된 특징과 달리 여기의 웨이블릿 필터는 정한 종류를 사용하며 라벨로 자동 학습하지 않습니다.
다단계 DWT·웨이블릿 패킷과의 차이
일반적인 다단계 DWT는 근사만 계속 나눕니다. 웨이블릿 패킷은 상세를 포함한 다른 대역도 더 나누는 구성을 허용합니다.[6] 이름에 웨이블릿이 들어가도 같은 계수 트리나 같은 순서가 아닙니다. 이 글의 두 단계 예시를 모든 패킷 분해의 출력 계약으로 옮기지 않습니다.
비교 정리: DWT는 규모별 분해, 역변환은 신호 재구성, 임계값 처리는 계수 수정입니다. 이 셋이 각각 무엇을 입력받고 반환하는지 나눠 읽습니다.
실전에서는 어디에 쓰이나요?
신호 전처리의 정보 손실을 비교합니다
센서의 작은 변화나 영상의 세부를 대역별로 나누고 일부 계수를 줄인 사본을 검토할 때 씁니다.[1][6] 실제 적용에서는 어떤 분기를 수정했는지와 임계값을 기록합니다. 이 글은 장비 고장이나 의료 상태를 진단한 결과를 제시하지 않으며 처리된 파형이 더 매끈하다는 이유로 정답이라고 판단하지 않습니다.
후속 AI의 특징 후보와 기준선을 만듭니다
각 단계 상세의 크기 분포나 특정 영역의 계수를 분류기 입력 후보로 검토할 수 있습니다. 이는 응용 설계 예시입니다. 같은 자료 분할에서 원본 입력의 기준 모델과 비교하고 웨이블릿·단계·요약 규칙은 검증 자료에서 고릅니다. 선택에 쓰지 않은 자료의 오류와 계산 비용도 따로 남깁니다.
이산 웨이블릿 변환을 적용할 때 어떤 순서로 확인하나요?
1. 입력 단위와 전체 설정을 고정합니다
시간 간격·영상 해상도·채널 순서·원본 길이와 자료형을 남깁니다. 웨이블릿 이름, 분해 단계, 끝값 모드, 처리 축도 함께 저장합니다. 같은 위치의 계수라도 설정이 바뀌면 같은 의미로 비교할 수 없으므로 새 입력에 적용할 전처리도 동일하게 유지합니다.
2. 작은 배열로 전체 복원을 먼저 확인합니다
상수·계단·한 점과 홀수 길이 배열을 준비합니다. 모든 계수를 유지한 복원의 길이와 오차부터 비교한 뒤 한 대역만 0으로 바꿉니다. 원본 길이와 끝부분을 명시적으로 대조하며 출력의 추가 표본을 실제 측정값으로 오해하지 않습니다. 그림이 아닌 수치 배열을 허용오차로 검사합니다.
3. 작은 단서와 독립 평가를 함께 확인합니다
없애려는 잡음뿐 아니라 지켜야 할 짧은 사건·가는 획을 포함합니다. 원본, 복원 오차와 후속 분류의 누락·오탐을 함께 남깁니다. 같은 녹음이나 사진에서 자른 겹친 구간을 훈련과 최종 평가 양쪽에 섞지 않고 실제로 독립적인 기록 단위로 나눕니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 상세 계수를 모두 잡음으로 보지 않습니다. 급격한 변화는 작은 결함·신호의 시작점일 수도 있습니다. 앞의 네 표본에서도 상세를 지우자 쌍 안의 차이가 사라졌습니다. 임계값을 키울수록 항상 AI 정확도가 좋아진다는 결론으로 넓히지 않습니다.
둘째, 표본 위치가 바뀐 효과를 살핍니다. 예시 배열을 한 칸 순환 이동한
[4,6,8,2]
의 하르 상세는 약
[-1.4142,4.2426]
입니다. 단순 이동에도 쌍이 바뀌어 상세 값이 달라졌습니다. 이 다운샘플링 계산을 이동 불변 특징이라고 가정하지 않습니다.
셋째, 끝값의 인공적인 변화를 확인합니다. 앞뒤를 주기적으로 잇거나 0으로 확장하면 실제 기록에 없던 점프가 생길 수 있습니다. 경계 계수가 크다고 새로운 사건이 확정된 것은 아닙니다. 다른 모드와 비교할 때는 계수 수와 복원 설정까지 함께 맞춥니다.[3]
넷째, 표시 정규화와 실제 계수를 구별합니다. 여러 대역의 밝기를 각각 맞춘 그림은 작은 값도 크게 보이게 합니다. 화면의 밝기로 대역 간 원래 크기를 비교하거나 음수 부호를 지운 배열로 원본을 복원하지 않습니다. 그림용 사본과 수치 계산용 원본을 분리합니다.[6]
주의: 변환과 역변환이 실행된 사실은 잡음 제거·압축·AI 인식의 성공과 다릅니다. 바꾼 계수, 잃은 단서와 실제 업무 오류를 함께 기록합니다.
자주 묻는 질문
Q1. DWT는 학습이 필요한 AI 모델인가요?
여기서는 정한 웨이블릿의 필터로 계수를 계산합니다. 모델의 가중치를 라벨로 훈련하는 과정이 아닙니다. 계수를 입력으로 쓰는 분류기나 설정 선택의 평가는 별도로 수행합니다.
Q2. 근사 계수는 원본의 평균값인가요?
하르 예시에서는 두 표본 평균에 배율이 붙습니다. 일반적인 웨이블릿의 근사 계수는 필터와 경계 규칙에도 좌우됩니다. 원본 평균이나 축소한 픽셀값 그 자체라고 읽지 않습니다.
Q3. 변환하면 저장 공간이 절반으로 줄어드나요?
한 분기의 길이와 전체 계수 수는 다릅니다. 끝값 확장으로 전체 계수가 원본보다 많아질 수도 있습니다. 계수 제거·양자화·부호화와 실제 파일 저장까지 확인해야 압축률을 확인합니다.[1][3]
Q4. 한 단계와 다단계에서 대역을 빼는 방법이 같나요?
한 단계 idwt는 한 분기의 None을 지원합니다. 다단계 waverec에서는 목록 항목을 지우거나 None으로 바꾸지 않고 같은 모양의 0 배열을 사용합니다. 선택한 함수의 계약을 따로 확인합니다.[2]
Q5. 분해 단계를 깊게 할수록 더 정확한가요?
단계는 보는 변화의 규모를 바꾸며 입력 길이와 필터 길이의 영향을 받습니다. 더 깊은 분해에서 경계 영향이 커질 수 있습니다. 후속 작업의 오류와 필요한 세부를 기준으로 고릅니다.[1]
Q6. 낮은 복원 오차면 AI 입력으로도 충분한가요?
전체 평균 오차가 작아도 드문 사건이나 작은 획이 사라질 수 있습니다. 원본과 복원 신호를 비교하고 후속 모델의 대상별 오류도 따로 평가합니다. 이 글의 합성 계산만으로 실제 업무 성능을 보장하지 않습니다.
출처
마무리
이산 웨이블릿 변환은 신호와 이미지를 여러 규모의 근사·상세 계수로 나눕니다. 저역·고역 분기, 근사를 다시 나누는 순서와 끝값 처리를 구별하면 전체 변환과 손실 복원, 평활 필터의 차이를 읽기 쉽습니다.
처음에는 작은 배열에서 전체 복원부터 확인해 보세요. 원본 길이와 웨이블릿·단계·모드·축을 기록하고 한 대역을 바꿨을 때 사라지는 모양을 살핍니다. 그다음 독립 자료에서 작은 단서와 후속 AI 오류를 확인하면 보기 좋은 그림과 유용한 전처리를 구별할 수 있습니다.
