Back to Search Document details
39th Meeting: Daejeon, KR, March 2025 2025-03-28 15:05
AHG13: Film grain analysis improvement
Abstract
This work presents several enhancements to the film grain analysis process. The proposed enhancements, primarily software updates, represent a natural progression aimed at improving the functionality of the software. They include:
JVET-AL0282 AHG13: Film grain analysis improvement [M. Radosavljević, F. Lefebvre, Z. Ameur, P. de Lagrange (InterDigital)] [late]

This work presents several enhancements to the film grain analysis process. The proposed enhancements, primarily software updates, represent a natural progression aimed at improving the functionality of the software. They include:

  • Improved cut-off frequency estimation where cut-off frequencies are now estimated per intensity interval.
  • Improved scaling factor estimation by aggregating over the time data points used to fit the curve.
  • Not performing analysis of chroma film grain when there is no grain in luma.
  • Fixing the bug in cut-off frequency estimation.
  • Fixing the bug (at one place only) that considered only 10bit input when processing data points in scaling function estimation.

Experiments were carried out on different film grain sequences, and the visual evaluation demonstrated that the estimated film grain parameters result in a higher fidelity representation of the film grain compared to the source.

Different cutoff frequencies can be used per intensity interval, and a 16x16 block grid is used for estimation. Both are functionalities supported by the SEI message, but not in current analysis software yet.

Scaling factor is stabilized to have less variation over different frames.

Decision(SW): Adopt JVET-AL0282 to film grain part of VTM

Decision: Also include in the TR new version JVET-AL2020

AdaptiveLoopFilter.cpp AdaptiveLoopFilter.h AdaptiveLoopFilter_avx.cpp AdaptiveLoopFilter_avx2.cpp AdaptiveLoopFilter_sse41.cpp AdaptiveLoopFilterX86.h AffineGradientSearch.cpp AffineGradientSearch.h AffineGradientSearch_avx.cpp AffineGradientSearch_avx2.cpp AffineGradientSearch_sse41.cpp AffineGradientSearchX86.h AlfParameters.h AmericanMaker_1920x1080_24fps_420_10b_27_all_new_decoded_fg_frame162_crop_555_285_1325_535.png AmericanMaker_1920x1080_24fps_420_10b_27_all_new_decoded_fg_frame233_crop_0_430_800_590.png AmericanMaker_1920x1080_24fps_420_10b_27_all_old_decoded_fg_frame162_crop_555_285_1325_535.png AmericanMaker_1920x1080_24fps_420_10b_27_all_old_decoded_fg_frame233_crop_0_430_800_590.png AmericanMaker_1920x1080_24fps_420_10b_frame162_crop_555_285_1325_535.png AmericanMaker_1920x1080_24fps_420_10b_frame233_crop_0_430_800_590.png Analyze.h annexBbytecount.cpp AnnexBread.cpp AnnexBread.h AnnexBwrite.h AQp.cpp AQp.h BinDecoder.cpp BinDecoder.h BinEncoder.cpp BinEncoder.h BitStream.cpp BitStream.h BitstreamExtractorApp.cpp BitstreamExtractorApp.h BitstreamExtractorAppCfg.cpp BitstreamExtractorAppCfg.h bitstreamextractormain.cpp Buffer.cpp Buffer.h Buffer_avx.cpp Buffer_avx2.cpp Buffer_sse41.cpp BufferX86.h CABACReader.cpp CABACReader.h CABACWriter.cpp CABACWriter.h CacheModel.cpp CacheModel.h ChromaFormat.cpp ChromaFormat.h CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CMakeLists.txt CodingStatistics.h CodingStructure.cpp CodingStructure.h Common.h common.natvis CommonDef.h CommonDefX86.cpp CommonDefX86.h CommonSimdCfg.h ConstraintInfo.cpp ConstraintInfo.h ContextModelling.cpp ContextModelling.h Contexts.cpp Contexts.h convert_NtoMbit_YCbCr.cpp DeblockingFilter.cpp DeblockingFilter.h DecApp.cpp DecApp.h DecAppCfg.cpp DecAppCfg.h DecCu.cpp DecCu.h DecLib.cpp DecLib.h decmain.cpp DecSlice.cpp DecSlice.h DepQuant.cpp DepQuant.h dtrace.cpp dtrace.h dtrace_blockstatistics.cpp dtrace_blockstatistics.h dtrace_buffer.h dtrace_codingstruct.h dtrace_next.h EncAdaptiveLoopFilter.cpp EncAdaptiveLoopFilter.h EncApp.cpp EncApp.h EncAppCfg.cpp EncAppCfg.h EncCfg.h EncCfgParam.h EncCu.cpp EncCu.h EncGOP.cpp EncGOP.h EncHRD.cpp EncHRD.h EncLib.cpp EncLib.h EncLibCommon.cpp EncLibCommon.h encmain.cpp EncModeCtrl.cpp EncModeCtrl.h encode.shl encodeCommand.sh EncReshape.cpp EncReshape.h EncSampleAdaptiveOffset.cpp EncSampleAdaptiveOffset.h EncSlice.cpp EncSlice.h EncTemporalFilter.cpp EncTemporalFilter.h ExtractBitrates.cpp ExtractBitrates.h ExtractBitratesMain.cpp GuessLambdaModifiers.cpp GuessLambdaModifiers.h GuessLambdaModifiersMain.cpp Hash.cpp Hash.h HRD.cpp HRD.h IbcHashMap.cpp IbcHashMap.h IbcHashmap_sse42.cpp IbcHashMapX86.h InitX86.cpp InterpolationFilter.cpp InterpolationFilter.h InterpolationFilter_avx.cpp InterpolationFilter_avx2.cpp InterpolationFilter_sse41.cpp InterpolationFilterX86.h InterPrediction.cpp InterPrediction.h InterSearch.cpp InterSearch.h IntraPrediction.cpp IntraPrediction.h IntraSearch.cpp IntraSearch.h JVET-AL0282-v1.docx libmd5.cpp libmd5.h makefile MatrixIntraPrediction.cpp MatrixIntraPrediction.h MCTS.cpp MCTS.h MD5.h meridian-oldfilm_1920x1080_24Hz_420_10b_27_all_new_decoded_fg_frame90_crop_430_300_835_325.png meridian-oldfilm_1920x1080_24Hz_420_10b_27_all_old_decoded_fg_frame90_crop_430_300_835_325.png meridian-oldfilm_1920x1080_24Hz_420_10b_frame90_crop_430_300_835_325.png MipData.h MotionInfo.h Mv.cpp Mv.h NAL.h NALread.cpp NALread.h NALwrite.cpp NALwrite.h ParameterSetManager.cpp ParameterSetManager.h parcat.cpp Picture.cpp Picture.h PictureParameterSet.cpp PictureParameterSet.h PicYuvMD5.cpp ProfileTierLevel.cpp ProfileTierLevel.h program_options_lite.cpp program_options_lite.h Quant.cpp Quant.h QuantRDOQ.cpp QuantRDOQ.h QuickStartGuide.pdf RateCtrl.cpp RateCtrl.h RdCost.cpp RdCost.h RdCost_avx.cpp RdCost_avx2.cpp RdCost_sse41.cpp RdCostWeightPrediction.cpp RdCostWeightPrediction.h RdCostX86.h readme.md Reshape.cpp Reshape.h Rom.cpp Rom.h RomLFNST.cpp RomTr.cpp RuntimeError.h SampleAdaptiveOffset.cpp SampleAdaptiveOffset.h SEI.cpp SEI.h SEIColourTransform.cpp SEIColourTransform.h SEIDigitallySignedContent.cpp SEIDigitallySignedContent.h SEIEncoder.cpp SEIEncoder.h SEIFilmGrainAnalyzer.cpp SEIFilmGrainAnalyzer.h SEIFilmGrainApp.cpp SEIFilmGrainApp.h SEIFilmGrainAppCfg.cpp SEIFilmGrainAppCfg.h SEIFilmGrainMain.cpp SEIFilmGrainSynthesizer.cpp SEIFilmGrainSynthesizer.h SEINeuralNetworkPostFiltering.cpp SEINeuralNetworkPostFiltering.h SEIread.cpp SEIread.h SEIRemovalApp.cpp SEIRemovalApp.h SEIRemovalAppCfg.cpp SEIRemovalAppCfg.h seiremovalmain.cpp SEIwrite.cpp SEIwrite.h SequenceParameterSet.cpp SequenceParameterSet.h Slice.cpp Slice.h static_vector.natvis StreamMergeApp.cpp StreamMergeApp.h StreamMergeAppCfg.cpp StreamMergeAppCfg.h StreamMergeMain.cpp SubpicconfSample.txt SubpicMergeApp.cpp SubpicMergeApp.h SubpicMergeMain.cpp targetBitrates.sh TearsOfSteel-044-fg02_3840x1714_10b_24p_27_all_new_decoded_fg_frame22_crop_3_30_1490_1000.png TearsOfSteel-044-fg02_3840x1714_10b_24p_27_all_old_decoded_fg_frame22_crop_3_30_1490_1000.png TearsOfSteel-044-fg02_3840x1714_10b_24p_frame22_crop_3_30_1490_1000.png TrQuant.cpp TrQuant.h TrQuant_EMT.cpp TrQuant_EMT.h TrQuantX86.h TrQuantX86_avx.cpp TrQuantX86_avx2.cpp TrQuantX86_sse41.cpp TypeDef.h Unit.cpp Unit.h UnitPartitioner.cpp UnitPartitioner.h UnitTools.cpp UnitTools.h version.h VideoIOYuv.cpp VideoIOYuv.h VideoParameterSet.cpp VideoParameterSet.h VLCReader.cpp VLCReader.h VLCWriter.cpp VLCWriter.h WarmNight_1920x1080_24fps_420_10b_27_all_new_decoded_fg_frame228_crop_700_360_850_535.png WarmNight_1920x1080_24fps_420_10b_27_all_old_decoded_fg_frame228_crop_700_360_850_535.png WarmNight_1920x1080_24fps_420_10b_frame228_crop_700_360_850_535.png WeightPredAnalysis.cpp WeightPredAnalysis.h WeightPrediction.cpp WeightPrediction.h
Decisions
Also include in the TR new version JVET-AL2020
Citation