nekhtiari / image-similarity-measures

:chart_with_upwards_trend: Implementation of eight evaluation metrics to access the similarity between two images. The eight metrics are as follows: RMSE, PSNR, SSIM, ISSM, FSIM, SRE, SAM, and UIQ.
MIT License
581 stars 68 forks source link

Multi-band image calculation FSIM is Nan value #62

Open MC1016 opened 7 months ago

MC1016 commented 7 months ago

When the code calculates FSIM for multi-band data, the actual single-band results are averaged, and the calculations are all Nan-valued, even with my randomly generated matrices

MC1016 commented 7 months ago

The problem may be in the PC component; the 4th element of the PC is all zero, but I don't know why.

seedlit commented 7 months ago

@MC1016 thanks for reporting. Can you share minimalist code to reproduce the issue?

MC1016 commented 7 months ago

@MC1016 thanks for reporting. Can you share minimalist code to reproduce the issue? Yes can u try this thanks from image_similarity_measures.quality_metrics import fsim def mfsim(y, out): gts = y imgs = out big_res = []

for gt, img in zip(gts, imgs):
    assert gt.shape == img.shape
    res = []
    for ii in range(gt.shape[0]):
        gt_band = gt[ii, :, :][np.newaxis, :, :] * 255
        img_band = img[ii, :, :][np.newaxis, :, :] * 255
        gt_band = np.transpose(gt_band, (1,2,0))
        img_band = np.transpose(img_band, (1,2,0))
        # NOTE: FSIM expects dynamic range [0, 255]
        res.append(fsim(gt_band, img_band))
    big_res.append(np.mean(res))
return np.mean(big_res)

if name == 'main': ref = np.random.rand(1,1, 3, 3) tar = np.random.rand(1,1, 3, 3)

print(mfsim1(ref,tar))

MC1016 commented 7 months ago

data structure [batch,channel,x,y]