我最近在做图像质量分析,用到了ssim.m这个代码,怎么在Matlab中用它?怎么引入两张图片?我在commend window中写入:《img1='G\Matlab\R2012a\ g';《img2='G\Matlab\R2012a\ g';《k=[0.01,0.03];《 window = fspecial('gaussian', 11, 1.5);《 L = 255;《 [mssim, ssim_map] = ssim(img1, img2, K, window, L);但是出来的结果是ssim为—Inf,ssim_map也为—Inf。输入的两张图片的大小均为339*340*3。ssim的源代码为:function [mssim, ssim_map] = ssim(img1, img2, K, window, L)if (nargin < 2 || nargin > 5) mssim = -Inf; ssim_map = -Inf; return;endif (size(img1) ~= size(img2)) mssim = -Inf; ssim_map = -Inf; return;end[M N] = size(img1);if (nargin == 2) if ((M < 11) || (N < 11)) mssim = -Inf; ssim_map = -Inf; return end window = fspecial('gaussian', 11, 1.5); % K(1) = 0.01; % default settings K(2) = 0.03; % L = 255; %endif (nargin == 3) if ((M < 11) || (N < 11)) mssim = -Inf; ssim_map = -Inf; return end window = fspecial('gaussian', 11, 1.5); L = 255; if (length(K) == 2) if (K(1) < 0 || K(2) < 0) mssim = -Inf; ssim_map = -Inf; return; end else mssim = -Inf; ssim_map = -Inf; return; endendif (nargin == 4) [H W] = size(window); if ((H*W) < 4 || (H > M) || (W > N)) mssim = -Inf; ssim_map = -Inf; return end L = 255; if (length(K) == 2) if (K(1) < 0 || K(2) < 0) mssim = -Inf; ssim_map = -Inf; return; end else mssim = -Inf; ssim_map = -Inf; return; endendif (nargin == 5) [H W] = size(window); if ((H*W) < 4 || (H > M) || (W > N)) mssim = -Inf; ssim_map = -Inf; return end if (length(K) == 2) if (K(1) < 0 || K(2) < 0) mssim = -Inf; ssim_map = -Inf; return; end else mssim = -Inf; ssim_map = -Inf; return; endendimg1 = double(img1);img2 = double(img2);% automatic downsamplingf = max(1,round(min(M,N)/256));%downsampling by f%use a simple low-pass filter if(f>1) lpf = ones(f,f); lpf = lpf/sum(lpf(:)); img1 = imfilter(img1,lpf,'symmetric','same'); img2 = imfilter(img2,lpf,'symmetric','same'); img1 = img1(1:f:end,1:f:end); img2 = img2(1:f:end,1:f:end);endC1 = (K(1)*L)^2;C2 = (K(2)*L)^2;window = window/sum(sum(window));mu1 = filter2(window, img1, 'valid');mu2 = filter2(window, img2, 'valid');mu1_sq = mu1.*mu1;mu2_sq = mu2.*mu2;mu1_mu2 = mu1.*mu2;sigma1_sq = filter2(window, img1.*img1, 'valid') - mu1_sq;sigma2_sq = filter2(window, img2.*img2, 'valid') - mu2_sq;sigma12 = filter2(window, img1.*img2, 'valid') - mu1_mu2;if (C1 > 0 && C2 > 0) ssim_map = ((2*mu1_mu2 + C1).*(2*sigma12 + C2))./((mu1_sq + mu2_sq + C1).*(sigma1_sq + sigma2_sq + C2));else numerator1 = 2*mu1_mu2 + C1; numerator2 = 2*sigma12 + C2; denominator1 = mu1_sq + mu2_sq + C1; denominator2 = sigma1_sq + sigma2_sq + C2; ssim_map = ones(size(mu1)); index = (denominator1.*denominator2 > 0); ssim_map(index) = (numerator1(index).*numerator2(index))./(denominator1(index).*denominator2(index)); index = (denominator1 ~= 0) & (denominator2 == 0); ssim_map(index) = numerator1(index)./denominator1(index);endmssim = mean2(ssim_map);return全部