Main Content

psnr

피크 신호 대 잡음비(PSNR)

설명

예제

peaksnr = psnr(A,ref)는 영상 ref를 기준으로 영상 A의 피크 신호 대 잡음비(PSNR)를 계산합니다. PSNR 값이 클수록 더 나은 영상 품질을 나타냅니다.

peaksnr = psnr(A,ref,peakval)은 피크 신호 값 peakval을 사용하여 영상 A의 PSNR을 계산합니다.

예제

peaksnr = psnr(___,'DataFormat',dataFormat)은 형식이 지정되지 않은 영상 데이터의 차원 레이블 dataFormat도 지정합니다. 이 구문을 사용하여 배치 차원을 따라 각 요소에 대한 별도의 PSNR을 반환할 수 있습니다.

예제

[peaksnr,snr] = psnr(___)은 단순한 신호 대 잡음비 snr도 반환합니다.

예제

모두 축소

영상을 읽어 들인 후 잡음을 추가한 복사본을 만듭니다. 원본 영상이 참조 영상입니다.

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 객체를 영상 데이터를 사용해 만듭니다.

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

참조 영상을 작업 공간으로 읽어 들입니다.

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])

Figure contains an axes object. The axes object contains an object of type image.

입력 배열의 데이터 형식을 각각 공간(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

입력 인수

모두 축소

분석할 영상으로, 임의의 차원의 숫자형 배열 또는 dlarray (Deep Learning Toolbox) 객체로 지정됩니다.

데이터형: single | double | int16 | uint8 | uint16

참조 영상으로, 숫자형 배열 또는 dlarray (Deep Learning Toolbox) 객체로 지정됩니다. 참조 영상은 영상 A와 크기와 데이터형이 같습니다.

데이터형: single | double | int16 | uint8 | uint16

피크 신호 수준으로, 음이 아닌 숫자로 지정됩니다. 지정하지 않는 경우 peakval의 디폴트 값은 Aref의 클래스에 따라 달라집니다.

  • 영상의 데이터형이 double 또는 single인 경우 psnr은 영상 데이터의 범위가 [0, 1]이라고 가정합니다. peakval의 디폴트 값은 1입니다.

  • 영상이 정수 데이터형인 경우 peakval의 디폴트 값은 클래스 범위에서 허용하는 가장 큰 값을 가집니다. 데이터형이 uint8인 경우 peakval의 디폴트 값은 255입니다. uint16형 또는 int16형인 경우 디폴트 값은 65535입니다.

입력 영상 Aref의 차원 레이블로, string형 스칼라 또는 문자형 벡터로 지정됩니다. dataFormat의 각 문자는 다음 레이블 중 하나여야 합니다.

  • S — 공간

  • C — 채널

  • B — 배치 관측값

이 형식에서는 두 개 이상의 채널 레이블 또는 배치 레이블을 포함할 수 없습니다. 입력 영상이 형식이 지정된 dlarray 객체인 경우 'dataFormat' 인수를 지정하지 마십시오.

예: 'SSC'는 배열에 두 개의 공간 차원과 한 개의 채널 차원이 있음을 나타냅니다. 2차원 RGB 영상 데이터에만 적합합니다.

예: 'SSCB'는 배열에 두 개의 공간 차원과 한 개의 채널 차원 그리고 한 개의 배치 차원이 있음을 나타냅니다. 2차원 RGB 영상 데이터 시퀀스에만 적합합니다.

출력 인수

모두 축소

PSNR(단위: 데시벨)로, 다음 값 중 하나로 반환됩니다.

입력 영상 유형PSNR 값

  • 형식이 지정되지 않은 숫자형 배열

  • 배치('B') 차원 없이 형식이 지정된 숫자형 배열

단일 PSNR 측정값이 있는 숫자형 스칼라.
  • 형식이 지정되지 않은 dlarray (Deep Learning Toolbox) 객체

단일 PSNR 측정값이 있는 1×1 dlarray 객체.
  • dataFormat 인수를 사용하여 지정된 배치 차원이 있는 숫자형 배열

입력 영상과 차원 수가 같은 숫자형 배열. peaksnr의 공간 차원과 채널 차원은 한원소 차원입니다. 배치 차원의 요소마다 한 개의 PSNR 측정값이 있습니다.
  • 배치 차원이 있는 형식이 지정된 dlarray 객체

  • dataFormat 인수를 사용하여 지정된 배치 차원이 있는, 형식이 지정되지 않은 dlarray 객체

입력 영상과 차원 수가 같은 dlarray 객체. peaksnr의 공간 차원과 채널 차원은 한원소 차원입니다. 배치 차원의 요소마다 한 개의 PSNR 측정값이 있습니다.

Aref의 데이터형이 single형이면 peaksnr의 데이터형은 single형입니다. 그 외의 경우 peaksnr의 데이터형은 double형입니다.

신호 대 잡음비(단위: 데시벨)로, 다음 값 중 하나로 반환됩니다.

입력 영상 유형PSNR 값

  • 형식이 지정되지 않은 숫자형 배열

  • 배치('B') 차원 없이 형식이 지정된 숫자형 배열

단일 SNR 측정값이 있는 숫자형 스칼라.
  • 형식이 지정되지 않은 dlarray (Deep Learning Toolbox) 객체

단일 SNR 측정값이 있는 1×1 dlarray 객체.
  • dataFormat 인수를 사용하여 지정된 배치 차원이 있는 숫자형 배열

입력 영상과 차원 수가 같은 숫자형 배열. snr의 공간 차원과 채널 차원은 한원소 차원입니다. 배치 차원의 요소마다 한 개의 SNR 측정값이 있습니다.
  • 배치 차원이 있는 형식이 지정된 dlarray 객체

  • dataFormat 인수를 사용하여 지정된 배치 차원이 있는, 형식이 지정되지 않은 dlarray 객체

입력 영상과 차원 수가 같은 dlarray 객체. peaksnr의 공간 차원과 채널 차원은 한원소 차원입니다. 배치 차원의 요소마다 한 개의 SNR 측정값이 있습니다.

Aref의 데이터형이 single형이면 snr의 데이터형은 single형입니다. 그 외의 경우 snr의 데이터형은 double형입니다.

알고리즘

psnr 함수는 다음 수식을 구현하여 PSNR을 계산합니다.

PSNR=10log10(peakval2/MSE)

peakval은 사용자가 지정하거나 이미지 데이터형의 범위에서 가져옵니다. 예를 들어, 데이터형이 uint8형인 영상인 경우 peakval255입니다. MSE는 Aref 간의 평균제곱오차입니다.

확장 기능

GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.

버전 내역

R2014a에 개발됨

모두 확장

참고 항목

| | | | | |

도움말 항목