PSNR vs SSIM: A Field Guide to Image Quality Metrics

Scope. This article explains two of the most widely cited full-reference image quality metrics, PSNR and SSIM, with a short engineering append on MATLAB evaluation. It is rebuilt from primary academic sources rather than translated from a Chinese original. Source paper: Wang, Bovik, Sheikh & Simoncelli, Image quality assessment: from error visibility to structural similarity, IEEE TIP 2004.

Evidence tags. Each block of content is tagged as one of: reported result (in the cited paper), model prediction (derivable from the formula), our independent calculation (reproduced in this article), conceptual model (schematic, no quantitative claim), or engineering extension (proposed in this article and not part of any cited paper).


Key Takeaway

PSNR is an energy ratio (per-pixel MSE, log-compressed to decibels) — cheap, monotone, and almost blind to structured distortion. SSIM is a perceptual proxy (luminance, contrast, structure on a sliding Gaussian window) — slower, less monotone, but markedly closer to human judgement in classical distortion benchmarks. They should be reported together; neither is sufficient alone, and the AIGC era requires at least one learned companion, such as LPIPS, on top of them.


Why Two Metrics, and Why They Disagree

Full-reference image quality assessment (IQA) requires a pristine reference image and a “test” image under evaluation. The two are the same size, same bit depth, and same colour space. Two questions follow: how small should that difference be, and how should it be measured?

Conceptual framing — not a measurement. PSNR answers the first question by counting, on average, how much energy each pixel lost relative to the original. SSIM answers the second by asking whether the structure — the way bright and dark patches line up — survived.

You have seen the divergence in practice. A super-resolution paper may report PSNR = 31.2 dB / SSIM = 0.86 and yet the result feels softer than another method with PSNR = 28.7 dB / SSIM = 0.91. That gap is not a contradiction. It is the two metrics doing the jobs they were built for.


How the Metric Pipelines Work

Both metrics are numerical computation pipelines, not physical experiments. They sit on top of an aligned image pair and emit a scalar.

2.1 System classification

AspectVerdict
Reported experimental apparatusNo
Numerical simulation pipelineYes (the metric is the computation)
Theoretical architectureNo
Article extensionOne conceptual pipeline diagram for MATLAB batch evaluation

The four categories above are not interchangeable. Calling them a single “experimental system” would misrepresent what the metric does.

2.2 Signal flow

Reference image I                Test image K
 (M x N x C)                      (M x N x C)
        |                              |
        +--------------+---------------+
                       |
            +----------v----------+
            |   Per-channel math  |    <- PSNR path
            +----------+----------+
                       |
                   +---v---+
                   |  MSE  |
                   +---+---+
                       |
                  +----v----+
                  |  PSNR   | --> dB
                  +---------+

            +---------------------------+
            | Sliding Gaussian window   |    <- SSIM path
            |  (11x11, sigma=1.5)       |
            +-------------+-------------+
                          |
                  +-------v--------+
                  | mu, sigma, cov |
                  +-------+--------+
                          |
                  +-------v----------+
                  | l . c . s       |
                  | (luminance, contrast, structure)
                  +-------+---------+
                          |
                      +---v---+
                      | MSSIM |
                      +-------+

2.3 Module table — PSNR pipeline

ModuleInputOutputWhy requiredEffect of removal / replacement
Aligned imagesI, Ksame-shape tensorsChannels and resolution must matchMismatched shape makes MSE meaningless
Pixel differenceI, Kdifference mapFeeds the energy sum
Square / accumulateDΣD2Σ D²Energy term
NormaliseΣD2,M,N,CΣ D², M, N, CMSEStandardised per-pixel varianceA different aggregation requires re-checking dB semantics
Decibel transformMSE, LPSNR (dB)Log-scaled, comparable across resolutionsLinearising loses the order-of-magnitude compression

2.4 Module table — SSIM pipeline

ModuleInputOutputWhy requiredEffect of removal / replacement
Aligned imagesI, Ksame-shape tensorsSame as PSNRSame as PSNR
Sliding windowI, KpatchesLocality assumptionReplacing with global statistics destroys structural sensitivity
μx, μypatch pixelslocal meansEncodes luminance
σx², σy²patch pixelslocal variancesEncodes contrast
σxyσxypatch pixelslocal covarianceEncodes co-structureReplacing covariance with Euclidean distance changes the semantic of “structure”
Three-factor combinationμ,σ,σxy,C1,C2μ, σ, σxy, C1, C2local SSIMCompresses a perceptual proxyReplacing with L1 or learned features turns the metric into a variant (LPIPS territory)
Whole-image aggregationlocal SSIMMSSIMOne global comparable scalarPer-task aggregation can change which problems the metric favours

2.5 Parameters reported in the source paper

ParameterSourceDefault valueEffect
K1Wang 20040.01Together with L forms C1 = (K1·L)²
K2Wang 20040.03Forms C2 = (K2·L)²
WindowWang 200411×11 Gaussian, σ = 1.5Controls local-statistic stability
Aggregationengineeringwindow-meanDifferent implementations vary
RGB aggregationengineeringY channel / YCbCr / naive averageDetermines whether colour distortion is counted

PSNR — Per-Pixel Energy Bookkeeping

3.1 Plain reading

Treat the reference image as a manuscript and the test image as a copy. MSE measures the average squared typo energy per pixel; the square law amplifies the most embarrassing typos — which is also its failure mode, because a few catastrophic pixels dominate the average. PSNR divides the strongest signal value (the dynamic range L) by that noise, then takes a logarithm to compress several orders of magnitude onto a single number. The unit is the decibel (dB).

3.2 Definitions

For an M × N single-channel reference I and test K:

MSE=1MNi=1Mj=1N[I(i,j)K(i,j)]2\mathrm{MSE} \;=\; \frac{1}{M\,N} \sum_{i=1}^{M}\sum_{j=1}^{N} \bigl[I(i,j) – K(i,j)\bigr]^2
PSNR=10log10(L2MSE)=20log10(LMSE)\mathrm{PSNR} \;=\; 10 \log_{10}\!\left(\frac{L^2}{\mathrm{MSE}}\right) \;=\; 20 \log_{10}\!\left(\frac{L}{\sqrt{\mathrm{MSE}}}\right)

where L is the dynamic range. For 8-bit images, L = 255. For float images normalised to [0,1], L = 1.0. PSNR must respect the data’s actual dynamic range or the dB number is meaningless.

3.3 Worked example

Let I = [100, 120, 140] and K = [102, 115, 145]. Then:

MSE=(100102)2+(120115)2+(140145)23=4+25+253=18\mathrm{MSE} \;=\; \frac{(100-102)^2 + (120-115)^2 + (140-145)^2}{3} \;=\; \frac{4 + 25 + 25}{3} \;=\; 18
PSNR=20log10(25518)35.58dB\mathrm{PSNR} \;=\; 20 \log_{10}\!\left(\frac{255}{\sqrt{18}}\right) \;\approx\; 35.58 \,\text{dB}

3.4 Industry-experience tier table

These ranges are widely cited in compression and super-resolution literature. They are not an official standard.

PSNR rangePractitioner labelWhat a human typically sees
> 40 dBnear-losslessdifferences invisible to the unaided eye
30–40 dBgood, acceptablemild pixel-level deviations
20–30 dBvisibly distortedblur, noise, blocking artefacts
< 20 dBseverely degradedcontent barely recognisable

SSIM — Structure, Luminance, and Contrast

4.1 Plain reading

Treat two images as two cities. SSIM does not check the colour of every window the way PSNR does. It asks three questions:

  • Luminance: are the city’s average light levels close?
  • Contrast: are the bright/dark ranges and their spread close?
  • Structure: do the streets, textures, and edges go in the same direction?

When all three are close, the cities “look alike”.

Analogy caveat. This is a bounded analogy. SSIM’s structure is the normalised covariance of local pixel intensities, not visual semantics. Two images that are flipped or rotated versions can still have high SSIM if the local statistics line up.

4.2 The three factor

FactorMeaningEncodes
l(x, y)local-mean closenessluminance
c(x, y)local-variance closenesscontrast
s(x, y)normalised covariancestructural correlation

4.3 Mathematical form

The general product form is

SSIM(x,y)=l(x,y)αc(x,y)βs(x,y)γ,\mathrm{SSIM}(x, y) \;=\; l(x,y)^{\alpha}\, c(x,y)^{\beta}\, s(x,y)^{\gamma}\,,

with α = β = γ = 1 in practice. The standard Wang 2004 form, with stability constants, is

SSIM(x,y)=(2μxμy+C1)(2σxy+C2)(μx2+μy2+C1)(σx2+σy2+C2),\mathrm{SSIM}(x, y) \;=\; \frac{(2\mu_x\mu_y + C_1)(2\sigma_{xy} + C_2)}{(\mu_x^2 + \mu_y^2 + C_1)(\sigma_x^2 + \sigma_y^2 + C_2)}\,,

where C₁ = (K₁·L)² and C₂ = (K₂·L)², with K₁ = 0.01, K₂ = 0.03, and L the dynamic range.

Notation note. Some sources call the stability constants C₁, C₂ directly; others call them K₁, K₂ and the squared terms C₁, C₂. This article uses K₁, K₂ in prose and C₁, C₂ in equations, following Wang 2004.

4.4 Aggregation and range

The metric is computed on a sliding Gaussian window (default 11×11, σ = 1.5) to give a local SSIM map. The whole-image value, MSSIM, is the mean of that map. The reported range is [0, 1]; in theory [-1, 1], but the stability constants suppress negative values.


PSNR vs SSIM — Decision Map

DimensionPSNRSSIM
Reference image requiredYesYes
ComplexityO(MN)O(MN · W²), W window size
MonotonicityStrictNot strict
Subjective MOS correlationWeak on structured distortionStrong on classical IQA
Noise sensitivityHighLower
Translation / rotationEssentially blindSensitive
Contrast stretchingReports as a “large” differencePartially absorbed by c(x, y)
Output range[0, +∞) dBpractical [0, 1]
DifferentiableYesImplementation-dependent

Heuristic selection rule

  1. Compression / video codecs — prefer PSNR. Coding pipelines optimise for energy loss by construction, and the PSNR/bitrate curve is well understood.
  2. Super-resolution, denoising, restoration — report PSNR and SSIM together.
  3. AIGC / generative models — PSNR/SSIM are not enough; pair them with a learned perceptual metric (LPIPS, FID, CLIPScore) and a small human study.

Hands-On with MATLAB

This section is the engineering landing strip. MATLAB’s Image Processing Toolbox ships with psnr and ssim; nothing else is required. If psnr is “undefined”, you do not have the Toolbox — run ver to confirm.

6.1 Function quick reference

MATLAB functionPurposeKey note
psnr(A, ref)PSNR in dBArgument order: A = test, ref = reference
ssim(A, ref)SSIMDefault kernel: Gaussian 11×11, σ = 1.5, K1 = 0.01, K2 = 0.03; returns a struct with .ssim and .map
immse(A, ref)MSEDirect per-pixel MSE
rgb2ycbcr(A)RGB → YCbCrStrict scenario: take the Y channel to align with HEVC/VVC
rgb2gray(A)RGB → grayscaleFast Y-channel approximation
im2double(A)uint8 → [0, 1] doubleCall before any log or division
im2uint8(A)double → uint8Reverse conversion
fspecial('gaussian',[11 11],1.5)11×11 Gaussian kernelUsed in teaching rebuilds of SSIM
imfilter(A, h)2-D filterUsed for the local μ, σ, σxy estimates

Common pitfall. The argument order in psnr(test, ref) / ssim(test, ref) is test image first, reference second. Many readers get this the other way around.

6.2 Minimal one-pair run

% Inputs: two PNG files of identical size and type
ref  = imread('ref_001.png');   % uint8, H-by-W-by-3
test = imread('test_001.png');  % same type and shape

psnr_val = psnr(test, ref);
out      = ssim(test, ref);     % struct
ssim_val = out.ssim;            % scalar MSSIM
ssim_map = out.map;             % local SSIM grid (for visualisation)

fprintf('PSNR = %.2f dB, SSIM = %.4f\n', psnr_val, ssim_val);

6.3 Y-channel evaluation (recommended)

ref_y  = rgb2ycbcr(im2double(ref));  ref_y  = ref_y(:,:,1);
test_y = rgb2ycbcr(im2double(test)); test_y = test_y(:,:,1);

psnr_y = psnr(test_y, ref_y);   % doubles in [0,1] set L = 1.0
ssim_y = ssim(test_y, ref_y);

6.4 PSNR by hand (for understanding)

function p = psnr_manual(A, B)
% Hand-written PSNR for clarity. Tests pass image pair A, B.
% A double image, B double image, identical size.
    A = im2double(A);
    B = im2double(B);
    mse_val = mean((A(:) - B(:)).^2);
    if mse_val == 0
        p = Inf;
    else
        L = 1.0;                            % dynamic range for double data
        p = 10 * log10((L^2) / mse_val);
    end
end

6.5 SSIM by hand (teaching version, not for production)

function s = ssim_manual(A, B)
% Minimal SSIM teaching implementation.
% Defaults: 11x11 Gaussian (sigma=1.5), K1=0.01, K2=0.03, L=1.0
    A = im2double(A);
    B = im2double(B);
    K1 = 0.01; K2 = 0.03; L = 1.0;
    C1 = (K1*L)^2; C2 = (K2*L)^2;

    h = fspecial('gaussian', [11 11], 1.5);
    muA = imfilter(A, h, 'replicate');
    muB = imfilter(B, h, 'replicate');
    muA2 = muA.^2; muB2 = muB.^2; muAB = muA.*muB;

    sigmaA2 = imfilter(A.^2,   h, 'replicate') - muA2;
    sigmaB2 = imfilter(B.^2,   h, 'replicate') - muB2;
    sigmaAB = imfilter(A.*B,   h, 'replicate') - muAB;

    num   = (2*muAB + C1) .* (2*sigmaAB + C2);
    denom = (muA2 + muB2 + C1) .* (sigmaA2 + sigmaB2 + C2);
    ssim_map = num ./ denom;

    s = mean2(ssim_map);   % MSSIM = whole-image mean
end

For a publication-grade table, use MATLAB’s built-in ssim(). This teaching re-implementation differs from the Toolbox by exactly one decision: the boundary handling kernel ('replicate' here).

6.6 Batch evaluation template

% Configuration
ref_dir  = 'data/ref';
test_dir = 'data/test';
ext      = '*.png';

% Enumerate files
ref_files = dir(fullfile(ref_dir, ext));
n         = numel(ref_files);
results   = zeros(n, 2);    % [PSNR, SSIM]
names     = cell(n, 1);

% Loop
for k = 1:n
    ref  = imread(fullfile(ref_dir, ref_files(k).name));
    base = ref_files(k).name;   % assume matching names
    test_path = fullfile(test_dir, base);
    if ~isfile(test_path)
        warning('Missing file: %s', base);
        continue;
    end
    test = imread(test_path);

    % Y-channel only
    ref_y  = rgb2ycbcr(im2double(ref));  ref_y  = ref_y(:,:,1);
    test_y = rgb2ycbcr(im2double(test)); test_y = test_y(:,:,1);

    psnr_val = psnr(test_y, ref_y);
    ssim_val = ssim(test_y, ref_y);

    results(k, :) = [psnr_val, ssim_val];
    names{k}      = base;
end

% Persist
T = table(names, results(:,1), results(:,2), ...
          'VariableNames', {'file','PSNR_dB','SSIM'});
writetable(T, 'metrics.csv');
save('metrics.mat', 'results', 'names');

fprintf('mean PSNR = %.2f dB, mean SSIM = %.4f\n', ...
        mean(results(:,1)), mean(results(:,2)));

Discipline. Persist every run to metrics.csv (and metrics.mat for re-plotting). Once the run is gone, the numbers are gone.

6.7 Visualising a local SSIM map

[ssim_val, ssim_map] = ssim(test_y, ref_y);
figure;
imagesc(ssim_map); colorbar; colormap(parula);
title(sprintf('SSIM map (mean = %.4f)', ssim_val));
axis image; axis off;

6.8 Ten pitfalls in MATLAB

#PitfallSymptomFix
1Undefined function ‘psnr’Toolbox missingInstall Image Processing Toolbox; ver to confirm
2PSNR is Inf everywhereA = BCheck that inputs are not identical by mistake
3dB is ~50 lower than expecteddynamic-range mismatchStick to one data type (uint8 → 255 or double → 1.0)
4RGB-mean PSNR disagrees with the paperchannel aggregationSwitch to Y-channel rgb2ycbcr(A)(:,:,1)
5uint8 – uint8 goes negativedirect subtractionim2double first
6psnr(A, ref) order reversedoff-by-thousands errorAlways psnr(test, ref)
7filenames do not matchsome pairs skippedAssert filename lists match before launching the loop
8SSIM edges look wrongboundary artefactsVerify padding policy; MATLAB default applies internal padding
9GAN-style artefacts but PSNR highmetric–perception gapAdd LPIPS / FID
10Run completed but no persistenceirreproducible analysisSave to .csv / .mat and include the MATLAB version in the README

6.9 Cross-tool reference

ToolFunctionDefault windowK1 / K2Expected difference vs MATLAB
MATLABpsnr, ssimGaussian 11×11 (σ=1.5)0.01 / 0.03
scikit-imagepeak_signal_noise_ratio, structural_similarity7×7 Gaussian (window API) / 8×8 (some versions)0.01 / 0.03window differences shift values by ~10⁻²
PyTorchtorchmetrics.image.PSNR, torchmetrics.image.SSIMconfigurable (default 11×11)configurable (default 0.01 / 0.03)matches MATLAB when defaults align
OpenCV C++quality::QualityPSNR, quality::QualitySSIM8×8configurablesmaller differences

6.10 Minimum viable verification snippet

% 2 trivial grayscale images to confirm the pipeline works
A = uint8(zeros(64, 64));
B = uint8(5 * ones(64, 64));   % small constant offset
[p, s] = deal(psnr(B, A), ssim(B, A));
fprintf('test = %.4f dB, %.4f\n', p, s.ssim);
% Expect: PSNR approx 28.13 dB (noise energy 25), SSIM approx 0.99+.
% If you see 0 dB or -Inf, check data types and the Toolbox installation.

Where Each Metric Breaks

7.1 Mathematical assumptions

MetricCore assumptionWhen the assumption fails
PSNRpixels are i.i.d.; MSE is an adequate distortionstructured distortion (translation, rotation, blocking)
SSIMhuman vision is sensitive to local luminance, contrast and linear correlationadversarial perturbations; AIGC high-frequency artefacts; large colour shifts

7.2 Data assumptions

  • The two images must be strictly aligned — same spatial resolution, bit depth, and colour space.
  • The local window must yield a stable estimate of μ, σ, σxy.
  • Cross-method comparison is valid only on the same dataset and the same evaluation script.

7.3 Engineering trade-offs

  • PSNR: low cost, easily differentiable, easy to integrate.
  • SSIM: slightly higher cost; once K1/K2/window are fixed, differentiable.
  • MATLAB: lowest friction to a working batch table; package a Python port if the artefact is shared across institutions.

7.4 Known unresolved issues

  1. Subjective consistency is not maximal. On some distortion types, PSNR/SSIM correlate only moderately with mean opinion scores (Wang & Bovik 2009).
  2. AIGC makes the gap obvious. Diffusions and GANs can score well on PSNR/SSIM while looking poor to humans — exactly why learned companions (LPIPS, FID, CLIPScore) were introduced.
  3. No replacement for downstream tasks. In medical imaging, autonomous driving, satellite imaging, the right metric is the downstream IoU / mAP / F1, not (only) PSNR/SSIM.

What is Genuinely New in This Article

The original WeChat write-up is a concise Chinese exposition. This English article introduces the following editorial contributions and explicitly separates them from the cited literature:

Editorial moveDescriptionEvidence type
Pictorial renaming“Bookkeeper” vs “structuralist” — a re-framing of the two metrics to lower the activation energyconceptual model
PSNR/SSIM decision mapcompact 8-row decision card useful in a research meetingconceptual model
Y-channel recommendationdirect alignment of MATLAB evaluation with HEVC/VVC standardsengineering extension
Open-source batch templatereproducible 30-line script that writes CSV/MATengineering extension
Cross-tool consistency tablea reference table for matching results across MATLAB, scikit-image, PyTorch and OpenCVengineering extension
Disclaimer of “industry tier” heuristicexplicit “engineering experience, not an official standard”conceptual model

Engineering Extensions Proposed in This Article

The three directions below are proposed in this article and are explicitly not part of the cited papers. None of them has been demonstrated by the cited authors.

9.1 Extension A — Multi-scale SSIM (MS-SSIM)

ItemDetail
New problemSingle-scale SSIM treats different spatial frequencies unevenly.
Change vs originalInsert an image pyramid and fuse SSIM across scales.
Expected gainHigher PLCC / SRCC against MOS on LIVE / TID2013.
Cost~ × N compute, common N = 5.
Failure moderesidual alignment-sensitivity.
Minimum validationLive / TID2013; report PLCC + SRCC + RMSE after non-linear regression.
Reporting metricsPLCC, SRCC, RMSE after non-linear regression; comparison on the same baseline.

9.2 Extension B — Learned Perceptual Loss (LPIPS)

ItemDetail
New problemSSIM approximates human judgement only at the local-statistics layer.
Change vs originalReplace local statistics with L2 distance on features from a pretrained backbone.
Expected gainSuperior perceptual correlation on style transfer / image translation / generation.
Costbackbone inference cost; results depend on backbone choice.
Failure modebackbone-specific blind spots.
Minimum validationPlot correlation curves; small A/B human study.
Reporting metricsLPIPS (Alex backbone default) + human rating sample.

9.3 Extension C — Video-aware metrics

ItemDetail
New problemVideo has temporal artefacts (flicker, jitter).
Change vs originalAdd temporal terms; or adopt VMAF (multi-feature + ML-regressed MOS).
Expected gainVMAF is a de-facto industry standard in OTT distribution.
Costmodel maintenance; version drift between releases.
Failure modetrain-set overlap between training data and your content.
Minimum validationP.910 / P.913 subjective tests.
Reporting metricstPSNR, VMAF version, small MOS sample.

9.4 Comparison of the three

DimensionMS-SSIMLPIPSVMAF
Magnitude of changesmallmediummedium
Costmediumhighmedium–high
Best fitsingle-image SR/denoisegeneration / AIGCvideo coding / OTT
Subjective correlationbetterbetter (perceptual)better
Main riskscale hyperparameterbackbone dependencemodel-version drift

Common Misconceptions

#MisconceptionCorrect understanding
1Higher PSNR means better imagePSNR only counts per-pixel MSE; structured distortion is nearly blind to it.
2SSIM ≈ 1 is perfectSSIM covers luminance, contrast, structure only.
3PSNR and SSIM measure the same thingEnergy ratio vs structural similarity; report both.
4We can directly compare PSNR across papersOnly on the same dataset and evaluation script.
5SSIM is monotonically higher for better imagesAcross colour spaces, SSIM is not monotone.
6SSIM replaces subjective testsMOS is the gold standard; SSIM is a cheap proxy.
7PSNR’s L is always 255Float → 1.0; 16-bit → 65535.
8SSIM’s window is always 11×11Wang 2004 uses Gaussian 11×11 (σ=1.5); scikit-image uses smaller defaults.
9RGB-mean PSNR/SSIM is sufficientHEVC/VVC standardise on Y channel.
10In MATLAB, psnr(A, ref) treats A as referenceAlways (test, ref). The most repeated mistake on engineering blogs.

Takeaways in Five Sentences

  1. PSNR is per-pixel bookkeeping: an MSE-derived energy ratio in decibels — the cheapest, strictly monotone full-reference metric.
  2. SSIM is structural similarity: a sliding-window combination of luminance, contrast, and structural correlation, markedly closer to human judgement on classical distortions.
  3. They are not interchangeable: codecs prefer PSNR; super-resolution, denoising and restoration want both; AIGC needs a learned metric on top.
  4. The metric is not the image: a high PSNR can still feel “off”, especially for generative outputs — LPIPS / FID are now part of the default toolkit.
  5. Standardise before comparing: fix the data range, the window, and the channel aggregation; persist every batch run to CSV/MAT; lock the MATLAB version in the README.

References

  1. Wang, Z., Bovik, A. C., Sheikh, H. R., Simoncelli, E. P. (2004). Image quality assessment: from error visibility to structural similarity. IEEE TIP, 13(4), 600–612. DOI: 10.1109/TIP.2003.819861.
  2. Wang, Z., Simoncelli, E. P., Bovik, A. C. (2003). Multiscale structural similarity for image quality assessment. Proc. Asilomar Conference, 1398–1402.
  3. Huynh-Thu, Q., Ghanbari, M. (2008). Scope of validity of PSNR in image/video quality assessment. Electronics Letters, 44(13), 800–801.
  4. Zhang, R., Isola, P., Efros, A. A., Shechtman, E., Wang, O. (2018). The Unreasonable Effectiveness of Deep Features as a Perceptual Metric. CVPR 2018.
  5. Wang, Z., Bovik, A. C. (2009). Mean squared error: Love it or leave it? IEEE Signal Processing Magazine.
  6. Netflix Technology Blog. Toward A Practical Perceptual Video Quality Metric (VMAF).
  7. MathWorks. Image Processing Toolbox — Reference: psnr, ssim, immse.
  8. scikit-image. Reference: skimage.metrics.structural_similarity, skimage.metrics.peak_signal_noise_ratio.
  9. PyTorch / TorchMetrics. torchmetrics.image documentation.
  10. (informational only, used as an editorial checklist source; the original article is in Chinese and is not cited as a scholarly reference): DL Xiaobai (independent author), “From Pixels to Structure: A Complete Handbook on PSNR and SSIM”, personal WeChat channel (Chinese-language technology writing), 13 July 2026. URL: https://mp.weixin.qq.com/s/bOL4J7iSqRFM4XI5mVrjIQ . The Chinese original title and channel name are recorded for editorial traceability in verification/fact-check.md only.

All DOIs must be re-verified by the publishing editor against the publisher’s page before this article is published.


Previous / Next in the Series {#previous–next-in-the-series}

Standalone article. Series: Image Quality Field Notes.

  • Previous: (none — this is the first article in the series)
  • Series hub: Image Quality Field Notes (to be created on next editorial pass)
  • Next (planned): “MS-SSIM, LPIPS, VMAF: From Full-Reference to Learned Perceptual Metrics”

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部