psnr
피크 신호 대 잡음비(PSNR)
구문
설명
은 형식이 지정되지 않은 영상 데이터의 차원 레이블 peaksnr
= psnr(___,'DataFormat',dataFormat
)dataFormat
도 지정합니다. 이 구문을 사용하여 배치 차원을 따라 각 요소에 대한 별도의 PSNR을 반환할 수 있습니다.
예제
원본 영상을 참조 영상으로 하여 잡음이 있는 영상의 PSNR 계산하기
영상을 읽어 들인 후 잡음을 추가한 복사본을 만듭니다. 원본 영상이 참조 영상입니다.
ref = imread('pout.tif'); A = imnoise(ref,'salt & pepper', 0.02);
PSNR을 계산합니다.
[peaksnr, snr] = psnr(A, ref);
fprintf('\n The Peak-SNR value is %0.4f', peaksnr);
The Peak-SNR value is 22.6437
fprintf('\n The SNR value is %0.4f \n', snr);
The SNR value is 15.5524
dlarray
입력값에 대한 PSNR 계산하기
영상을 작업 공간으로 읽어 들인 후, 형식이 지정되지 않은 dlarray
객체를 영상 데이터를 사용해 만듭니다.
ref = imread("strawberries.jpg");
ref = im2single(ref);
dlref = dlarray(ref);
영상에 점잡음을 추가한 다음, 형식이 지정되지 않은 dlarray
객체를 잡음 있는 영상 데이터를 사용해 만듭니다.
noisy = imnoise(ref,'salt & pepper');
dlnoisy = dlarray(noisy);
원래 데이터에 대한 잡음 있는 데이터의 피크 SNR과 SNR을 계산합니다.
[peaksnr,snr] = psnr(dlnoisy,dlref)
peaksnr = 1x1 single dlarray 17.5941
snr = 1x1 single dlarray 11.1265
영상 시퀀스에 있는 영상의 PSNR 계산하기
참조 영상을 작업 공간으로 읽어 들입니다.
ref = imread("office_1.jpg");
참조 영상 크기의 6개 영상 시퀀스를 저장할 두 배열을 사전할당합니다.
numFrames = 6; imsOriginal = zeros([size(ref) numFrames],class(ref)); imsNoisy = zeros([size(ref) numFrames],class(ref));
영상을 읽어 들여 사전할당된 배열에 추가합니다. 첫 번째 배열은 원래 영상 데이터를 저장합니다. 두 번째 배열은 점잡음이 추가된 영상 데이터를 저장합니다.
for p = 1:numFrames filename = strcat("office_",num2str(p),".jpg"); im = imread(filename); imsOriginal(:,:,:,p) = im; imsNoisy(:,:,:,p) = imnoise(im,"salt & pepper"); end
영상 시퀀스를 몽타주에 표시합니다. 첫 번째 행에는 원래 영상 데이터가 포함된 시퀀스가 표시됩니다. 두 번째 행에는 잡음 있는 영상 데이터가 포함된 시퀀스가 표시됩니다.
montage(cat(4,imsOriginal,imsNoisy),"Size",[2 numFrames])
입력 배열의 데이터 형식을 각각 공간(spatial), 공간(spatial), 채널(channel), 배치(batch)를 뜻하는 "SSCB"로 지정하여, 원래 그대로의 해당 영상에 대한 잡음 있는 각 영상의 PSNR을 계산합니다.
peak_psnrs = psnr(imsNoisy,imsOriginal,"DataFormat","SSCB"); peak_psnrs = squeeze(peak_psnrs)
peak_psnrs = 6×1
16.3560
16.9698
17.8079
18.1843
18.0656
17.1682
입력 인수
A
— 분석할 영상
숫자형 배열 | dlarray
객체
분석할 영상으로, 임의의 차원의 숫자형 배열 또는 dlarray
(Deep Learning Toolbox) 객체로 지정됩니다.
데이터형: single
| double
| int16
| uint8
| uint16
peakval
— 피크 신호 레벨
음이 아닌 숫자
피크 신호 수준으로, 음이 아닌 숫자로 지정됩니다. 지정하지 않는 경우 peakval
의 디폴트 값은 A
와 ref
의 클래스에 따라 달라집니다.
영상의 데이터형이
double
또는single
인 경우psnr
은 영상 데이터의 범위가 [0, 1]이라고 가정합니다.peakval
의 디폴트 값은1
입니다.영상이 정수 데이터형인 경우
peakval
의 디폴트 값은 클래스 범위에서 허용하는 가장 큰 값을 가집니다. 데이터형이uint8
인 경우peakval
의 디폴트 값은255
입니다.uint16
형 또는int16
형인 경우 디폴트 값은65535
입니다.
dataFormat
— 차원 레이블
string형 스칼라 | 문자형 벡터
입력 영상 A
와 ref
의 차원 레이블로, string형 스칼라 또는 문자형 벡터로 지정됩니다. dataFormat
의 각 문자는 다음 레이블 중 하나여야 합니다.
S
— 공간C
— 채널B
— 배치 관측값
이 형식에서는 두 개 이상의 채널 레이블 또는 배치 레이블을 포함할 수 없습니다. 입력 영상이 형식이 지정된 dlarray
객체인 경우 'dataFormat
' 인수를 지정하지 마십시오.
예: 'SSC'
는 배열에 두 개의 공간 차원과 한 개의 채널 차원이 있음을 나타냅니다. 2차원 RGB 영상 데이터에만 적합합니다.
예: 'SSCB'
는 배열에 두 개의 공간 차원과 한 개의 채널 차원 그리고 한 개의 배치 차원이 있음을 나타냅니다. 2차원 RGB 영상 데이터 시퀀스에만 적합합니다.
출력 인수
peaksnr
— PSNR
숫자형 스칼라 | 숫자형 배열 | dlarray
객체
PSNR(단위: 데시벨)로, 다음 값 중 하나로 반환됩니다.
입력 영상 유형 | PSNR 값 |
---|---|
| 단일 PSNR 측정값이 있는 숫자형 스칼라. |
| 단일 PSNR 측정값이 있는 1×1 dlarray 객체. |
| 입력 영상과 차원 수가 같은 숫자형 배열. peaksnr 의 공간 차원과 채널 차원은 한원소 차원입니다. 배치 차원의 요소마다 한 개의 PSNR 측정값이 있습니다. |
| 입력 영상과 차원 수가 같은 dlarray 객체. peaksnr 의 공간 차원과 채널 차원은 한원소 차원입니다. 배치 차원의 요소마다 한 개의 PSNR 측정값이 있습니다. |
A
와 ref
의 데이터형이 single
형이면 peaksnr
의 데이터형은 single
형입니다. 그 외의 경우 peaksnr
의 데이터형은 double
형입니다.
snr
— 신호 대 잡음비
숫자형 스칼라 | 숫자형 배열 | dlarray
객체
신호 대 잡음비(단위: 데시벨)로, 다음 값 중 하나로 반환됩니다.
입력 영상 유형 | PSNR 값 |
---|---|
| 단일 SNR 측정값이 있는 숫자형 스칼라. |
| 단일 SNR 측정값이 있는 1×1 dlarray 객체. |
| 입력 영상과 차원 수가 같은 숫자형 배열. snr 의 공간 차원과 채널 차원은 한원소 차원입니다. 배치 차원의 요소마다 한 개의 SNR 측정값이 있습니다. |
| 입력 영상과 차원 수가 같은 dlarray 객체. peaksnr 의 공간 차원과 채널 차원은 한원소 차원입니다. 배치 차원의 요소마다 한 개의 SNR 측정값이 있습니다. |
A
와 ref
의 데이터형이 single
형이면 snr
의 데이터형은 single
형입니다. 그 외의 경우 snr
의 데이터형은 double
형입니다.
알고리즘
psnr
함수는 다음 수식을 구현하여 PSNR을 계산합니다.
peakval
은 사용자가 지정하거나 이미지 데이터형의 범위에서 가져옵니다. 예를 들어, 데이터형이 uint8
형인 영상인 경우 peakval
은 255
입니다. MSE는 A
와 ref
간의 평균제곱오차입니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
psnr
함수는 C 코드 생성을 지원합니다(MATLAB® Coder™가 필요함). 자세한 내용은 Code Generation for Image Processing 항목을 참조하십시오.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
이 함수는 GPU 배열을 완전히 지원합니다. 자세한 내용은 GPU를 사용한 영상 처리 항목을 참조하십시오.
버전 내역
R2014a에 개발됨R2021a: 딥러닝 배열의 메트릭 계산 및 계산 차원 지정
psnr
함수는 이제 딥러닝 응용 사례에 대해 dlarray
입력값을 받습니다.
이 함수는 또한 'S'
(공간), 'C'
(채널), 'B'
(배치) 차원 레이블이 있는 형식이 지정된 데이터를 지원합니다. 배치 차원이 있는 데이터의 경우 함수는 배치 차원을 따라 각 인덱스에 별도의 결과를 반환합니다.
R2021a: GPU 가속 지원
psnr
함수는 이제 GPU 가속을 지원합니다(Parallel Computing Toolbox™가 필요함).
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)