ssim
영상 품질을 측정하는 구조적 유사도(SSIM) 지수
설명
예제
구조적 유사도 지수(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)")
영상에 대한 전역 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))
dlarray
입력값에 대한 SSIM 계산하기
영상을 작업 공간으로 읽어 들입니다. 블러 처리 필터를 적용하여 다른 버전의 영상을 생성합니다.
ref = imread("pout.tif"); A = imgaussfilt(ref,1.5,"FilterSize",11,"Padding","replicate");
두 영상 모두 몽타주로 표시합니다.
montage({ref A})
title("Reference Image (Left) vs. Blurred Image (Right)")
참조 영상 및 흐릿한 영상을 네 번째 차원을 따라 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
입력 인수
A
— 품질을 측정할 영상
숫자형 배열 | dlarray
객체
품질을 측정할 영상으로, 숫자형 배열 또는 dlarray
(Deep Learning Toolbox) 객체로 지정됩니다. A
가 2차원 회색조 영상 또는 3차원 회색조 볼륨이 아닌 경우(예: RGB 영상 또는 회색조 영상 스택) DataFormat
이름-값 인수를 지정하십시오. A
가 형식이 지정된 dlarray
객체인 경우 DataFormat
이름-값 인수를 지정하지 마십시오.
데이터형: single
| double
| int16
| uint8
| uint16
ref
— 참조 영상
숫자형 배열 | dlarray
객체
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: ssim(A,ref,"DynamicRange",100)
DataFormat
— 차원 레이블
string형 스칼라 | 문자형 벡터
입력 영상 A
와 ref
의 차원 레이블로, string형 스칼라 또는 문자형 벡터로 지정됩니다. DataFormat
의 각 문자는 다음 레이블 중 하나여야 합니다.
S
— 공간C
— 채널B
— 배치 관측값
이 형식에서는 두 개 이상의 채널 레이블 또는 배치 레이블을 포함할 수 없습니다. 입력 영상이 형식이 지정된 dlarray
객체인 경우 DataFormat
이름-값 인수를 지정하지 마십시오.
예: "SSC"
는 배열에 두 개의 공간 차원과 한 개의 채널 차원이 있음을 나타냅니다. 2차원 RGB 영상 데이터에만 적합합니다.
예: "SSCB"
는 배열에 두 개의 공간 차원과 한 개의 채널 차원 그리고 한 개의 배치 차원이 있음을 나타냅니다. 2차원 RGB 영상 데이터 시퀀스에만 적합합니다.
데이터형: char
| string
DynamicRange
— 입력 영상의 동적 범위
diff(getrangefromclass(A))
(디폴트 값) | 양의 스칼라
입력 영상의 동적 범위로, 양의 스칼라로 지정됩니다. "DynamicRange"
의 디폴트 값은 영상 A
의 데이터형에 따라 달라지며 diff(
로 계산됩니다. 예를 들어, 데이터형이 getrangefromclass
(A))uint8
형인 영상의 디폴트 동적 범위는 255
이고, 데이터형이 double
형 또는 single
형이고 픽셀 값이 [0, 1] 범위 내에 있는 영상의 디폴트 동적 범위는 1
입니다.
데이터형: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
Exponents
— 휘도 항, 대비 항, 구조 항에 대한 지수
[1 1 1]
(디폴트 값) | 음이 아닌 숫자로 구성된 요소를 3개 가진 벡터
휘도 항, 대비 항, 구조 항에 대한 지수로, 음이 아닌 숫자로 구성된 요소를 3개 가진 벡터 [alpha beta gamma]
로 지정됩니다.
데이터형: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
Radius
— 등방성 가우스 함수의 표준편차
1.5
(디폴트 값) | 양수
등방성 가우스 함수의 표준편차로, 양수로 지정됩니다. 이 값은 국소 통계량을 추정하기 위해 픽셀 주변의 이웃 픽셀에 가중치를 부여하는 데 사용됩니다. 국소 통계량을 추정할 때 블로킹 아티팩트를 방지하기 위해 이렇게 가중치를 부여합니다.
데이터형: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
RegularizationConstants
— 휘도 항, 대비 항, 구조 항에 대한 정규화 상수
음이 아닌 숫자로 구성된 요소를 3개 가진 벡터
휘도 항, 대비 항, 구조 항에 대한 정규화 상수로, 음이 아닌 숫자로 구성된 요소를 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
출력 인수
ssimval
— SSIM 지수
숫자형 스칼라 | 숫자형 배열 | dlarray
객체
SSIM 지수로, 다음 값 중 하나로 반환됩니다.
입력 영상 유형 | SSIM 값 |
---|---|
| 단일 SSIM 측정값이 있는 숫자형 스칼라. |
| 단일 SSIM 측정값이 있는 스칼라 |
| 입력 영상과 차원 수가 같은 숫자형 배열. ssimval 의 공간 차원은 한원소 차원입니다. 채널 또는 배치 차원의 요소마다 한 개의 SSIM 측정값이 있습니다. |
| 입력 영상과 차원 수가 같은 dlarray 객체. ssimval 의 공간 차원은 한원소 차원입니다. 채널 또는 배치 차원의 요소마다 한 개의 SSIM 측정값이 있습니다. |
ssimval
의 데이터형은 double
형입니다. 단, A
의 데이터형이 single
형인 경우 ssimval
의 데이터형은 single
형입니다.
ssimval
의 값의 범위는 일반적으로 [0, 1]입니다. 값 1은 가장 높은 품질을 나타내며, A
와 ref
가 서로 동일한 경우에 발생합니다. 더 작은 값은 더 낮은 품질에 해당합니다. 입력값과 이름-값 쌍 인수의 일부 조합에 대해 ssimval
은 음수일 수 있습니다.
ssimmap
— SSIM 지수의 국소 값
숫자형 배열 | dlarray
객체
SSIM 지수의 국소 값으로, 다음 값 중 하나로 반환됩니다.
입력 영상 유형 | SSIM 값 |
---|---|
| 입력 영상과 같은 크기의 숫자형 배열. 입력 영상의 요소마다 한 개의 SSIM 측정값이 있습니다. |
| 입력 영상과 같은 크기의 dlarray 객체. 입력 영상의 요소마다 한 개의 SSIM 측정값이 있습니다. |
| 입력 영상과 같은 크기의 숫자형 배열. 입력 영상의 공간 요소마다 채널 또는 배치 차원을 따라 한 개의 SSIM 측정값이 있습니다. |
| 입력 영상과 같은 크기의 dlarray 객체. 입력 영상의 공간 요소마다 채널 또는 배치 차원을 따라 한 개의 SSIM 측정값이 있습니다. |
ssimmap
의 데이터형은 double
형입니다. 단, A
의 데이터형이 single
형인 경우 ssimmap
의 데이터형은 single
형입니다.
세부 정보
구조적 유사도 지수
영상의 3가지 특성인 휘도, 대비, 구조의 시각적 영향을 평가하는 영상 품질 메트릭입니다.
팁
알고리즘
SSIM 지수 품질 평가 지수는 3개의 항, 즉 휘도 항, 대비 항, 구조 항의 계산을 기반으로 합니다. 전체 지수는 3개 항의 곱셈 조합입니다.
여기서
이 경우, μx, μy, σx,σy, σxy는 영상 x, y의 국소 평균, 표준편차, 교차공분산입니다. α = β = γ = 1(Exponents
의 디폴트 값), C3 = C2/2(C3의 디폴트 선택값)이면 SSIM이 다음과 같이 단순화됩니다.
"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.
확장 기능
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
이 함수는 GPU 배열을 완전히 지원합니다. 자세한 내용은 GPU를 사용한 영상 처리 항목을 참조하십시오.
버전 내역
R2014a에 개발됨R2021b: GPU 가속 지원
ssim
함수는 이제 GPU 가속을 지원합니다(Parallel Computing Toolbox™가 필요함).
R2021b: 딥러닝 배열과 계산 차원 지정 지원
ssim
함수는 딥러닝 응용 사례에 대해 dlarray
입력값을 받습니다.
이 함수는 또한 'S'
(공간), 'C'
(채널), 'B'
(배치) 차원 레이블이 있는 형식이 지정된 데이터를 지원합니다. 이 함수는 채널 차원과 배치 차원을 따라 각 인덱스에 대해 별도의 결과를 반환합니다.
참고 항목
psnr
| immse
| multissim
| multissim3
도움말 항목
- Compare Image Quality at Various Compression Levels
- List of Functions with dlarray Support (Deep Learning Toolbox)
- 사용자 지정 훈련 루프, 손실 함수 및 신경망 정의 (Deep Learning 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)