Value of Life

PSNR(peak signal to noise rate)이란? 본문

IT/이미지 프로세싱

PSNR(peak signal to noise rate)이란?

앵글메이커 2009. 4. 15. 19:17
반응형
PSNR(peak signal to noise rate)이란?
 
SNR을 구할 때는 10log(신호전력/ 잡음전력)으로구합니다. 이 때 신호전력과 잡음전력은 모두 "평균전력"을 의미합니다.
PSNR은 평균전력을 이용하지 않고 peak 전력을 이용하여 SNR을 계산하는 것입니다. 신호에 순간적으로 나타날 수 있는 최대 전력으로 계산하는 것이지요.
예를 들어서 정현파 교류신호의 최대전력과 평균전력은 2배 차이가 됩니다. 교류 삼각파 신호는 3배 차이가 납니다.  교류 구형파는 같습니다.  
따라서 사용된 신호가 어떤 성질을 가지는가에 따라서 SNR과 PSNR은 그 계산값이 달라집니다.
===================================================================================
뭔소린지 몰라서 더 찾아보니 아래와 같은 내용이 있었다..
===================================================================================
인터넷 기반 Streaming은 흔히들 MS의 WMV Encoder를 많이
사용 하시고 계실 것입니다.
이유는 일단 인코딩 및 디코딩 되는 솔루션 자체가 개인이 사용하기에
무리가 없고 또한, 무료라는 강점이 있습니다(단, 비영리목적)

하지만 문제는 어떻게 하면 화질과 대역폭의 상관 관계를 따져서
효율적으로 인코딩 하느냐가 관건인데 문제는 나름대로 표준이
없다는데 일단 처음 인코딩을 접하시는 분들은 남감 하실 겁니다.

화질을 평가 한다는 것은 대부분 주관적이라고 판단하기 쉬우나
나름대로 화질의 객관적 평가 기준이 있습니다.
그 첫번째가 바로 PSNR(Peek Signal To Noise Rate)값으로
평가 되는데 이 PSNR값 이외에도 많은 수치들이 있습니다만
통상 PSNR값을 국제표준에서는 화질의 척도로 삼는게 통례입니다.

본론으로 넘어가서 이 PSNR(Peek 전력에 따른 SNR)값으로
각각의 입력 해상도 및 출력 해상도, 그리고 Target Bitrate와의
상관 관계를 비교하여 보면 대략적인 수치 환산이 가능해 집니다.
(WMV로 인코딩 시)

예를 잠깐 들자면

1.입력 영상 해상도:320*240
   출력 영상 해상도:320*240
   영상 특성:움직임 小(강의 및 설교 등)
   Target Bitrate:250~450Kbps(영상 220Kbps + 음성 128Kbps)
   PSNR 값: 평균 32~36db

2.입력 영상 해상도:640*480
   출력 영상 해상도:640*480
   영상 특성:움직임 大(스포츠 및 액션 씬)
   Target Bitrate:950Kbps~1.5Mbps
   PSNR 값: 평균 34~42db

등의 결과가 나옵니다.
통상적으로 30db 이상의 영상은 인간의 시각 특성상 화질 저하로
판단하기 쉽지 않은 영상입니다.
그러므로 입력 영상 및 출력 영상 그리고 대역폭 관계를 고려 하시어
Target Bitrate를 적절하게 설정 하시면 됩니다.

참고적으로 WMV역시 MPEG4를 기본으로한 DCT(Discrete Cosine
Transform)변환기법이 기본 압축 알고리즘인데 DCT 특성 자체가
저주파(화면영역에서 볼때엔 비교적 큰 면적으로 차지하는 부분)
성분(이를 DC성분이라고 함)의 데이터 할당은 많게하고 고주파
(화면 영역에서 디테일을 나타내는 부분)성분(이를 AC성분이라고 함)
의 데이터 할당을 줄여서 전체 데이터를 줄이는(동영상에서는 Motion
Vector를 이용한 인접 Frame의 차이 성분까지 코딩함) 특성을 가지기에
영상 특성상 Preprocessing(전처리-샤프니스 및 컬러 코렉션 등)을
실시하게 되면 인간의 시각 특성상 저주파 필터(Low Pass Filter)
역활을 하게 되어 부드러운 이미지 효과를 볼수 있으나 사실적인
해상도의 향상은 기대하기 어렵습니다.

특히, WMV 알고리즘 자체가 기본 MPEG4 베이스에
독자적인 Key Frame 상관성 코딩 기법을 적용하고 있어서
양자화 매트릭스 테이블(Quantization Matrix Table)을 외부에서
따로 수정하지 못하기 때문에 좀더 낳은 화질을 위해서는
CBR MODE(Constant Bit Rate Mode-고정 비트레이트 할당)
보다는 VBR MODE(Variablr Bit Rate-가변 비트레이트 할당)
로 인코딩 하시는게 질적인 향상을 가져 옵니다.
------------------------------------------------
PSNR(Peak signal to noise ratio)맞구요.
영상처리에서 많이 쓰이는데, 어떤 두 영상에 대한 차이를 사람들 사이에 감을 가질 수 있도록 숫자로 나타내기 위한 값입니다.
PSNR = 10*log_{10} [(255*255)/MSE]
MSE = 1/N^2 *SUM_{x=1}^{N}[SUM_{y=1}^{N}[(f(x,y)-g(x,y))^2]]
: 모든 동일위치의 픽셀값의 차이의 제곱의 합 / 모든 픽셀 갯수의 제곱
x : 영상의 x resolution
y : 영상의 y resolution
N (=x*y) : 모든 픽셀의 갯수
SUM : sigma operation
f(x,y) : 좌표(x,y)의 비교영상 픽셀값
g(x,y) : 좌표(x,y)의 원래영상 픽셀값
Signal power를 noise power로 나누는 개념은 기존의 SNR과 비슷한데,
수많은 서로다른 영상을 모두 대표하는 signal power가 없으므로,
8bit 픽셀의 최고값(peak)인 255의 제곱으로 signal power를 대신합니다.
두 영상의 차이가 없다면 분자부분이 0이 되어 PSNR은 무한대가 되겠죠.
보통 30dB가 넘으면 두 영상의 차이를 눈으로 구분할 수 없는 정도라고 얘기되어 집니다
 
----------------------------------------------------------
S/N or SNR (signal-to-noise ratio) ; 신호 대 잡음비
아날로그디지털 통신에서, 신호 대 잡음비, 즉 S/N은 신호 대 잡음의 상대적인 크기를 재는 것으로서, 대개 데시벨이라는 단위가 사용된다.
여기서, 들어오는 신호의 세기(단위는 마이크로볼트)를 Vs라 하고, 잡음을 Vn이라 하면(이것도 단위는 역시 마이크로볼트), 신호 대 잡음비는 아래와 같은 공식으로 표현된다.
S/N = 20 log10(Vs/Vn)
이때 만약 Vs = Vn 이면, S/N = 0 이 된다. 이 경우에는 잡음의 수준이 신호와 심하게 맞서기 때문에, 신호경계를 읽을 수 없게 된다. 따라서, 디지털 통신에서는 이 경우에 아마도 데이터 속도의 저하가 생기게 되는데, 그 이유는 빈번한 에러로 인해 데이터 패킷 중 일부를 재전송해야하기 때문이다.
가장 이상적인 것은, Vs가 Vn 보다 커서 S/N이 양수가 되는 경우이다. 한 예로서, Vs = 10.0이고 Vn = 1.00이라고 가정하면,
S/N = 20 log10(10.0) = 20.0 dB
로서 신호를 명확하게 읽을 수 있게 된다. 만약 신호가 매우 약하지만, 그래도 잡음보다 우위에 있다면 (이를테면 1.3 마이크로볼트라든가)
S/N = 20 log10(1.30) = 2.28 dB
로서 한계 상황을 맞게 된다. 이러한 상황하에서는 어느정도의 데이터 속도저하가 일어날 수 있다.
만약 Vs가 Vn 보다 적으면, S/N은 음수가 된다. 이러한 경우에는, 수신하는 컴퓨터나 터미널에서 신호수준을 증가시키거나 또는 잡음수준을 감소시키는 조치를 취하지 않는 한, 일반적으로 신뢰성 있는 통신이 불가능하다.
통신기술자들은 항상 S/N 비율을 최대화시키기 위해 노력한다. 전통적으로, 이것은 원하는 데이터 속도에 수신시스템의 대역폭을 가능한한 일치시키는 노력을 통해 달성되어 왔다. 그러나, 또다른 방법들이 있다. 몇몇 경우에서는, 대역확산 기술이 시스템 성능을 증가시킬 수 있다. S/N 비율은 필요하다면, 원천신호에 더 높은 수준의 신호출력을 제공함으로써 증가될 수 있다. 전파 망원경과 같은 몇몇 고수준 시스템에서는, 수신회로의 온도를 절대온도(-273℃)에 근접하도록 낮춤으로써 내부 잡음을 최소화시킨다. 무선시스템에서는, 송수신 안테나의 성능을 항상 최적화하는 것이 중요하다.
 
--------------------------------------------------------------------------------
 
Fundamental Image Class
가장 기본적인 이미지 클래스들입니다. CBaseImage 클래스가 최상위 기반 클래스이고, 나머지는 거기서 파생된 클래스들입니다. 내부 저장 타입이 unsigned char or BYTE(8bit) 형이면 CCharImage, float(32bit)이면 CFloatImage입니다. CImage와 CFrame은 template을 이용해서 다양한 저장 타입에 대한 객체를 생성할 수 있는 클래스들입니다.
Name
Description
Main Files
Download
CBaseImage
이미지 클래스의 최상위 기반 클래스
CCharImage
내부 저장 데이터 형식이 BYTE(unsigned char)인 이미지 클래스
CFloatImage
내부 저장 데이터 형식이 float인 이미지 클래스
CImage
템플릿을 이용한 이미지 클래스
CColorImage
템플릿을 이용한 컬러 이미지 클래스.
CFrame
템플릿을 이용한 동영상 프레임 클래스, CImage의 변종
CColorFrame
템플릿을 이용한 컬러 동영상 프레임 클래스, CColorImage의 변종
 
Utility Class
Name
Description
Main Files
Download
DCT 클래스, 1D, 2D, Fast
CWavelet
 
 
JPEG 인코더, 디코더, "visual C++ bible(이상엽, 영진출판사)"에 수록되어 있음, kenti가 수정.
CPNM
sanguni가 만든 ppm, pgm을 읽고 쓸 수 있는 클래스입니다.
CRandom
uniform random number를 발생시키는 클래스, Bernoulli 분포를 발생시키는 함수 포함.
CColorSpaceConversion
컬러 공간을 변경하는 클래스, RGB, YCbCr
CChromaSubsampling
4:4:4 -> 4:2:0
 
CIOBitStream
bit 단위 입출력을 수행할수 있게 하는 클래스, CInBitStream과 COutBitStream의 기반 클래스
CInBitStream
bit 단위 입력을 수행할 수 있는 클래스, 이미지 혹은 비디오 코딩시 유용하다.
COutBitStream
bit 단위 출력을 수행할 수 있는 클래스, 이미지 혹은 비디오 코딩시 유용하다.
CBMA
BMA(Block Matching Algorithm) 혹은 Motion Estimation
 
CPrintString
여려 환경에서 사용가능한 출력 도구 클래스
CPSNRUtil
두 시퀀스 사이의 PSNR을 구해주는 클래스
초절정 간단 벡터 양자화기 클래스(vector quantization)
CStopWatch
프로그램의 수행 시간을 측정하는 클래스
low level API를 이용한 녹음, 재생 클래스
 
Useful functions & tiny programs
Name
Description
Executable or SRC
Download
Fast_IDCT
mmx를 사용한 fast idct 함수, Project Mayo에서
 
Fast_DCT
mmx를 사용한 fast dct 함수
 
mmx를 사용한 fast color conversion, From Project Mayo
random_fn
uniform random number 발생 함수, CRandom 클래스의 코어 부분
calc_psnr
두 장의 흑백 이미지 사이의 PSNR(peak signal to noise)를 구하는 프로그램
avi_info
avi 파일의 내용을 분석해 주는 프로그램, windows 환경, Qian's homepage에서 가져옮
avi2yuv
avi 파일을 yuv 형식으로 변경해주는 프로그램, windows 환경, FourCC가 UYVY인 경우만 동작, Qian's homepage에서 가져옮
결합된 yuv(concatednated yuv)형식을 avi 동영상으로 만들어 주는 함수, windows 환경, Qian's homepage에서 가져옮, kenti 수정
Said와 Pearlman의 산술부호화방법(arithmetic coding) 구현, I.H. Witten, R. Neal, J.G. Cleary, "Arithmetic Coding for Data Compression", Comm ACM., 30(6):520-541, June 1987.
 
Windows Application
Name
Description
Executable
Download
DirectDraw를 이용한 시퀀스 뷰어, DirectX runtime이 필요합니다. qcif,cif,yuv,raw,gray 지원
이미지 및 시퀀스를 보여주면서 PSNR을 계산해 주는 뷰어
Stats
데이터의 통계를 내어주는 프로그램
Stats.exe
 
Example Images
여러 가지 예제 프로그램에 사용할 이미지들입니다. 확장자가 gray인 이미지는 헤더가 없는 회색조 이미지입니다. 리눅스 환경에서 이미지를 보려면 ImageMagic을 설치하고, display -size 512x512 lenna.gray 라고 입력하면 됩니다. 윈도우 환경에서는 확장자를 raw로 변경하고 포토샵 등과 같은 이미지 처리 프로그램을 이용하면 볼 수 있습니다. 위의 VIPAViewer를 통해서도 볼 수 있습니다. :-)
Name
Description
sample
Download
lena.gray
512x512 크기의 흑백 이미지
 
zelda.gray 
512x512 크기의 흑백 이미지
 
 
Example Sequences
여러 가지 예제 프로그램에 사용할 동영상 시퀀스들입니다.
Name
Description
sample
Download
akiyo.qcif
QCIF 형식(176x144)의 컬러 시퀀스(300 프레임), 사람의 움직임이 작은 시퀀스
 
foreman.qcif
QCIF 형식(176x144)의 컬러 시퀀스(300 프레임), 배경과 사람이 모두 움직이는 시퀀스
 
 
 
 
Documents
여러 가지 유용한 문서들입니다. 쉽게 얻을 수 없는 정보들을 올려 놓을 생각입니다.
Name
Description
Using x86 assembly language with Microsoft Visual c++ 6 (원본은 http://www.cs.virginia.edu/~csadmin/pc/pclabs/vc_faq/vc_asm.html 입니다.)
많이 쓰이는 fourcc에 대하여 설명해 놓은 자료입니다. 원본은 http://www.am-soft.ru/fourcc.html 입니다.)
paper를 작성할 때 Type 1 폰트를 사용하는 방법에 대한 글입니다. (원본은 http://www.math.hawaii.edu/~ralph/MathOnWeb/TeXPDF.html 입니다.)
visio에서 그린 그림이 LaTeX에 잘 붙지 않는 경우가 있는데, 그런 문제를 해결하기 위한 방법입니다. (원본은 http://www.win.tue.nl/latex/visioeps.html 입니다.)
여러가지 wavelet image codec의 성능을 비교해 놓은 문서입니다. (원본은 http://www.icsl.ucla.edu/ipl/psnr_results.html 입니다.)
progressive JPEG과 SPIHT의 성능을 비교해 놓은 문서입니다. (원본은 http://www.code.ucsd.edu/~sherwood/image_examples/comparison/compare.html 입니다.)
여러 가지 비트율에서 SPIHT 코덱의 성능을 보여주고 있는 문서입니다. (원본은 http://www.code.ucsd.edu/~sherwood/image_examples/progressive/progressive.html 입니다.)
여러 BER에서 progressive JPEG과 SPIHT의 성능을 비교해서 보여 주는 문서입니다. (원본은 http://www.code.ucsd.edu/~sherwood/image_examples/noisy_chan/noisy_ex.html 입니다.)
표준 C++ 라이브러리를 이용하여 Huffman Encoder를 구현하는 예제 문서입니다. 고통스러운 코딩 없이도 복잡한 일을 간단히 처리할 수 있다는 것을 보여줍니다. :-) (원본은 http://www.dogman.net/markn/articles/pq_stl/priority.htm)
 
Useful Links
여러 가지 유용한 사이트들입니다. 간단한 코멘트를 첨가해 놓겠습니다.
Name
Description
ETC
FFmpeg Multimedia System, 다양한 포맷을 지원하는 libavcodec을 제작하는 project. 다양한 동영상 포맷에 대한 소스코드를 얻을 수 있다. windows 함수들을 사용하지 않는다는 것이 강점. linux에서 쉽게 컴파일 가능하다. visual c에서는 컴파일 실패 -.-
 
C++을 기반으로 한, wavelet을 이용한 영상 압축을 위한 SDK. Geoff Davis가 작성한 것으로 널리 사용되고 있다. Very Goooood!
 
Mark Nelson이 관리하는 압축에 관한 광범위한 내용(특히 소스 코드)을 정리, 링크해 놓은 웹페이지. 방문 강추 !
 
출처:http://www.video-processing.pe.kr/

반응형

'IT > 이미지 프로세싱' 카테고리의 다른 글

k-means 알고리즘  (2) 2008.08.16
영상처리 용어 해설  (0) 2008.08.16