Source code for sewar.no_ref

from __future__ import absolute_import, division, print_function
import numpy as np
from .full_ref import uqi
from scipy.ndimage.filters import uniform_filter
from .utils import imresize

[docs]def d_lambda (ms,fused,p=1): """calculates Spectral Distortion Index (D_lambda). :param ms: low resolution multispectral image. :param fused: high resolution fused image. :param p: parameter to emphasize large spectral differences (default = 1). :returns: float -- D_lambda. """ L = ms.shape[2] M1 = np.ones((L,L)) M2 = np.ones((L,L)) for l in range(L): for r in range(l+1,L): M1[l,r] = M1[r,l] = uqi(fused[:,:,l],fused[:,:,r]) M2[l,r] = M2[r,l] = uqi(ms[:,:,l],ms[:,:,r]) diff = np.abs(M1 - M2)**p return (1./(L*(L-1)) * np.sum(diff))**(1./p)
[docs]def d_s (pan,ms,fused,q=1,r=4,ws=7): """calculates Spatial Distortion Index (D_S). :param pan: high resolution panchromatic image. :param ms: low resolution multispectral image. :param fused: high resolution fused image. :param q: parameter to emphasize large spatial differences (default = 1). :param r: ratio of high resolution to low resolution (default=4). :param ws: sliding window size (default = 7). :returns: float -- D_S. """ pan = pan.astype(np.float64) fused = fused.astype(np.float64) pan_degraded = uniform_filter(pan.astype(np.float64), size=ws)/(ws**2) pan_degraded = imresize(pan_degraded,(pan.shape[0]//r,pan.shape[1]//r)) L = ms.shape[2] M1 = np.zeros(L) M2 = np.zeros(L) for l in range(L): M1[l] = uqi(fused[:,:,l],pan) M2[l] = uqi(ms[:,:,l],pan_degraded) diff = np.abs(M1 - M2)**q return ((1./L)*(np.sum(diff)))**(1./q)
[docs]def qnr (pan,ms,fused,alpha=1,beta=1,p=1,q=1,r=4,ws=7): """calculates Quality with No Reference (QNR). :param pan: high resolution panchromatic image. :param ms: low resolution multispectral image. :param fused: high resolution fused image. :param alpha: emphasizes relevance of spectral distortions to the overall. :param beta: emphasizes relevance of spatial distortions to the overall. :param p: parameter to emphasize large spectral differences (default = 1). :param q: parameter to emphasize large spatial differences (default = 1). :param r: ratio of high resolution to low resolution (default=4). :param ws: sliding window size (default = 7). :returns: float -- QNR. """ a = (1-d_lambda(ms,fused,p=p))**alpha b = (1-d_s(pan,ms,fused,q=q,ws=ws,r=r))**beta return a*b