Main Content

ssim

영상 품질을 측정하는 구조적 유사도(SSIM) 지수

설명

예제

ssimval = ssim(A,ref)ref를 참조 영상 또는 볼륨으로 사용하여 회색조 영상 또는 볼륨 A의 구조적 유사도(SSIM) 지수를 계산합니다. 값이 1에 가까울수록 더 나은 영상 품질을 나타냅니다.

ssimval = ssim(A,ref,Name,Value)는 SSIM을 계산할 때 이름-값 쌍을 사용하여 계산의 여러 특성을 제어합니다.

[ssimval,ssimmap] = ssim(___)A의 각 픽셀 또는 복셀에 대해 국소 SSIM 값도 반환합니다.

예제

모두 축소

영상을 작업 공간으로 읽어 들입니다. 블러 처리 필터를 적용하여 다른 버전의 영상을 생성합니다.

ref = imread("pout.tif");
H = fspecial("Gaussian",[11 11],1.5);
A = imfilter(ref,H,"replicate");

두 영상 모두 몽타주로 표시합니다. 이 영상들은 격자 울타리 경계와 같이 선명한 고대비 영역에서 가장 큰 차이를 보입니다.

montage({ref,A})
title("Reference Image (Left) vs. Blurred Image (Right)")

Figure contains an axes object. The axes object with title Reference Image (Left) vs. Blurred Image (Right) contains an object of type image.

영상에 대한 전역 SSIM 값과 각 픽셀에 대한 국소 SSIM 값을 계산합니다.

[ssimval,ssimmap] = ssim(A,ref);

국소 SSIM 맵을 표시합니다. 그림 제목에 전역 SSIM 값을 포함합니다. 국소 SSIM의 값이 작으면 국소 SSIM 맵에서 어두운 픽셀로 나타납니다. 국소 SSIM 값이 작은 영역은 블러 처리한 영상이 참조 영상과 뚜렷이 구분되는 영역입니다. 국소 SSIM 값의 큰 값이 밝은 픽셀로 나타납니다. 국소 SSIM이 큰 영역은 참조 영상의 균일 영역에 해당합니다. 여기서는 영상에 대한 블러 처리의 효과가 크지 않습니다.

imshow(ssimmap,[])
title("Local SSIM Map with Global SSIM Value: "+num2str(ssimval))

Figure contains an axes object. The axes object with title Local SSIM Map with Global SSIM Value: 0.94068 contains an object of type image.

영상을 작업 공간으로 읽어 들입니다. 블러 처리 필터를 적용하여 다른 버전의 영상을 생성합니다.

ref = imread("pout.tif");
A = imgaussfilt(ref,1.5,"FilterSize",11,"Padding","replicate");

두 영상 모두 몽타주로 표시합니다.

montage({ref A})
title("Reference Image (Left) vs. Blurred Image (Right)")

Figure contains an axes object. The axes object with title Reference Image (Left) vs. Blurred Image (Right) contains an object of type image.

참조 영상 및 흐릿한 영상을 네 번째 차원을 따라 16번 복제하여 영상 배치를 시뮬레이션합니다.

A = repmat(A,[1 1 1 16]);
ref = repmat(ref,[1 1 1 16]);

참조 영상 배치 및 흐릿한 영상 배치에 대해 형식이 지정된 dlarray 객체를 만듭니다. 공간-공간-채널-배치에 대한 형식은 "SSCB"입니다.

A = dlarray(single(A),"SSCB"); 
ref = dlarray(single(ref),"SSCB");

영상에 대한 전역 SSIM 값과 각 픽셀에 대한 국소 SSIM 값을 계산합니다. ssimVal은 배치의 영상마다 스칼라 SSIM 값을 반환합니다. ssimMap은 배치의 각 영상에 대해 영상과 동일한 크기의 SSIM 값 맵을 반환합니다.

[ssimVal,ssimMap] = ssim(A,ref);
size(ssimVal)
ans = 1×4

     1     1     1    16

size(ssimMap)
ans = 1×4

   291   240     1    16

입력 인수

모두 축소

품질을 측정할 영상으로, 숫자형 배열 또는 dlarray (Deep Learning Toolbox) 객체로 지정됩니다. A가 2차원 회색조 영상 또는 3차원 회색조 볼륨이 아닌 경우(예: RGB 영상 또는 회색조 영상 스택) DataFormat 이름-값 인수를 지정하십시오. A가 형식이 지정된 dlarray 객체인 경우 DataFormat 이름-값 인수를 지정하지 마십시오.

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

품질 측정 시 비교할 참조 영상으로, 숫자형 배열 또는 A와 동일한 크기 및 데이터형의 dlarray (Deep Learning Toolbox) 객체로 지정됩니다. ref가 2차원 회색조 영상 또는 3차원 회색조 볼륨이 아닌 경우(예: RGB 영상 또는 회색조 영상 스택) DataFormat 이름-값 인수를 지정하십시오. ref가 형식이 지정된 dlarray 객체인 경우 DataFormat 이름-값 인수를 지정하지 마십시오.

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

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: ssim(A,ref,"DynamicRange",100)

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

  • S — 공간

  • C — 채널

  • B — 배치 관측값

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

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

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

데이터형: char | string

입력 영상의 동적 범위로, 양의 스칼라로 지정됩니다. "DynamicRange"의 디폴트 값은 영상 A의 데이터형에 따라 달라지며 diff(getrangefromclass(A))로 계산됩니다. 예를 들어, 데이터형이 uint8형인 영상의 디폴트 동적 범위는 255이고, 데이터형이 double형 또는 single형이고 픽셀 값이 [0, 1] 범위 내에 있는 영상의 디폴트 동적 범위는 1입니다.

데이터형: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

휘도 항, 대비 항, 구조 항에 대한 지수로, 음이 아닌 숫자로 구성된 요소를 3개 가진 벡터 [alpha beta gamma]로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

등방성 가우스 함수의 표준편차로, 양수로 지정됩니다. 이 값은 국소 통계량을 추정하기 위해 픽셀 주변의 이웃 픽셀에 가중치를 부여하는 데 사용됩니다. 국소 통계량을 추정할 때 블로킹 아티팩트를 방지하기 위해 이렇게 가중치를 부여합니다.

데이터형: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

휘도 항, 대비 항, 구조 항에 대한 정규화 상수로, 음이 아닌 숫자로 구성된 요소를 3개 가진 벡터 [c1 c2 c3]으로 지정됩니다. ssim 함수는 이 정규화 상수를 사용하여 국소 평균 또는 표준편차가 0에 가까운 영상 영역의 불안정성을 방지합니다. 따라서 정규화 상수에는 0이 아닌 작은 값을 사용해야 합니다.

디폴트 값은 다음과 같습니다.

  • C1 = (0.01*L).^2(여기서 L은 지정된 DynamicRange 값임)

  • C2 = (0.03*L).^2(여기서 L은 지정된 DynamicRange 값임)

  • C3 = C2/2

데이터형: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

출력 인수

모두 축소

SSIM 지수로, 다음 값 중 하나로 반환됩니다.

입력 영상 유형SSIM 값

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

  • 채널 ("C") 또는 배치 ("B") 차원 없이 형식이 지정된 숫자형 배열

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

단일 SSIM 측정값이 있는 스칼라 dlarray 객체.

  • DataFormat 이름-값 인수를 사용하여 지정된 채널 또는 배치 차원이 있는 숫자형 배열

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

  • DataFormat 이름-값 인수를 사용하여 지정된 채널 또는 배치 차원이 있는, 형식이 지정되지 않은 dlarray 객체

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

ssimval의 데이터형은 double형입니다. 단, A의 데이터형이 single형인 경우 ssimval의 데이터형은 single형입니다.

ssimval의 값의 범위는 일반적으로 [0, 1]입니다. 값 1은 가장 높은 품질을 나타내며, Aref가 서로 동일한 경우에 발생합니다. 더 작은 값은 더 낮은 품질에 해당합니다. 입력값과 이름-값 쌍 인수의 일부 조합에 대해 ssimval은 음수일 수 있습니다.

SSIM 지수의 국소 값으로, 다음 값 중 하나로 반환됩니다.

입력 영상 유형SSIM 값

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

  • 채널 ("C") 또는 배치 ("B") 차원 없이 형식이 지정된 숫자형 배열

입력 영상과 같은 크기의 숫자형 배열. 입력 영상의 요소마다 한 개의 SSIM 측정값이 있습니다.
  • 형식이 지정되지 않은 dlarray (Deep Learning Toolbox) 객체

입력 영상과 같은 크기의 dlarray 객체. 입력 영상의 요소마다 한 개의 SSIM 측정값이 있습니다.
  • DataFormat 이름-값 인수를 사용하여 지정된 채널 또는 배치 차원이 있는 숫자형 배열

입력 영상과 같은 크기의 숫자형 배열. 입력 영상의 공간 요소마다 채널 또는 배치 차원을 따라 한 개의 SSIM 측정값이 있습니다.
  • 채널 또는 배치 차원이 있는 형식이 지정된 dlarray 객체

  • DataFormat 이름-값 인수를 사용하여 지정된 채널 또는 배치 차원이 있는, 형식이 지정되지 않은 dlarray 객체

입력 영상과 같은 크기의 dlarray 객체. 입력 영상의 공간 요소마다 채널 또는 배치 차원을 따라 한 개의 SSIM 측정값이 있습니다.

ssimmap의 데이터형은 double형입니다. 단, A의 데이터형이 single형인 경우 ssimmap의 데이터형은 single형입니다.

세부 정보

모두 축소

구조적 유사도 지수

영상의 3가지 특성인 휘도, 대비, 구조의 시각적 영향을 평가하는 영상 품질 메트릭입니다.

  • Aref가 RGB 영상 데이터를 지정하는 경우, "DataFormat" 이름-값 인수를 사용하여 채널 차원 "C"에 레이블을 지정하십시오. 그런 다음 ssimvalssimmap의 채널 차원을 따라 mean 함수를 적용하여 전체 영상의 SSIM 지수를 근사할 수 있습니다.

알고리즘

SSIM 지수 품질 평가 지수는 3개의 항, 즉 휘도 항, 대비 항, 구조 항의 계산을 기반으로 합니다. 전체 지수는 3개 항의 곱셈 조합입니다.

SSIM(x,y)=[l(x,y)]α[c(x,y)]β[s(x,y)]γ

여기서

l(x,y)=2μxμy+C1μx2+μy2+C1,c(x,y)=2σxσy+C2σx2+σy2+C2,s(x,y)=σxy+C3σxσy+C3

이 경우, μx, μy, σxy, σxy는 영상 x, y의 국소 평균, 표준편차, 교차공분산입니다. α = β = γ = 1(Exponents의 디폴트 값), C3 = C2/2(C3의 디폴트 선택값)이면 SSIM이 다음과 같이 단순화됩니다.

SSIM(x,y)=(2μxμy+C1)(2σxy+C2)(μx2+μy2+C1)(σx2+σy2+C2)

"Exponents"에 대해 정수가 아닌 값을 지정할 경우 ssim 함수는 중간 휘도 항, 대비 항, 구조 항을 [0, inf] 범위로 고정하여 복소수 값의 출력값을 방지합니다.

참고 문헌

[1] Zhou, W., A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli. "Image Quality Assessment: From Error Visibility to Structural Similarity." IEEE Transactions on Image Processing. Vol. 13, Issue 4, April 2004, pp. 600–612.

확장 기능

버전 내역

R2014a에 개발됨

모두 확장