Skip to main content

BM3D denoising filter for VapourSynth, implemented in AVX2

Project description

VapourSynth-BM3DCPU

This package contains the CPU implementation of the VapourSynth-BM3DCUDA filter.

Installation

Install the multi-target wheel that includes binaries for multiple architectures (AVX2 and Zen4)

pip install vapoursynth-bm3dcpu

To compile and install the package with optimizations tailored to your specific CPU:

  • Windows within the developer shell:

    pip install vapoursynth-bm3dcpu --no-binary vapoursynth-bm3dcpu
    
  • Linux:

    pip install vapoursynth-bm3dcpu --no-binary vapoursynth-bm3dcpu
    

Building from source

Requirements

  • C++ Compiler: C++17 compatible.
    • Windows: Clang or MSVC (Visual Studio 2019+).
    • Linux: GCC.
uv build --package vapoursynth-bm3dcpu

Detailed parameter information from the parent project follows.


VapourSynth-BM3DCUDA

Copyright© 2021 WolframRhodium

BM3D denoising filter for VapourSynth, implemented in CUDA.

Description

  • Please check VapourSynth-BM3D.

  • The _rtc version compiles GPU code at runtime, which might runs faster than standard version at the cost of a slight overhead.

  • The cpu version is implemented in AVX and AVX2 intrinsics, serves as a reference implementation on CPU. However, bitwise identical outputs are not guaranteed across CPU and CUDA implementations.

Requirements

  • CPU with AVX support.

  • CUDA-enabled GPU(s) of compute capability 5.0 or higher (Maxwell+).

  • GPU driver 450 or newer.

The minimum requirement on compute capability is 3.5, which requires manual compilation (specifying nvcc flag -gencode arch=compute_35,code=sm_35).

The cpu version does not require any external libraries but requires AVX2 support on CPU in addition.

Parameters

{bm3dcuda, bm3dcuda_rtc, bm3dcpu}.BM3D(clip clip[, clip ref=None, float[] sigma=3.0, int[] block_step=8, int[] bm_range=9, int radius=0, int[] ps_num=2, int[] ps_range=4, bint chroma=False, int device_id=0, bool fast=True, int extractor_exp=0])
  • clip:

    The input clip. Must be of 32 bit float format. Each plane is denoised separately if chroma is set to False. Data of unprocessed planes is undefined. Frame properties of the output clip are copied from it.

  • ref:

    The reference clip. Must be of the same format, width, height, number of frames as clip.

    Used in block-matching and as the reference in empirical Wiener filtering, i.e. bm3d.Final / bm3d.VFinal:

    basic = core.{bm3dcpu, bm3dcuda, bm3dcuda_rtc}.BM3D(src, radius=0)
    final = core.{bm3d...}.BM3D(src, ref=basic, radius=0)
    
    vbasic = core.{bm3d...}.BM3D(src, radius=radius_nonzero).bm3d.VAggregate(radius=radius_nonzero)
    vfinal = core.{bm3d...}.BM3D(src, ref=vbasic, radius=r).bm3d.VAggregate(radius=r)
    
    # alternatively, using the v2 interface
    basic_or_vbasic = core.{bm3dcpu, bm3dcuda, bm3dcuda_rtc}.BM3Dv2(src, radius=r)
    final_or_vfinal = core.{bm3d...}.BM3Dv2(src, ref=basic_or_vbasic, radius=r)
    

    corresponds to the followings (ignoring color space handling and other differences in implementation), respectively

    basic = core.bm3d.Basic(clip)
    final = core.bm3d.Final(basic, ref=basic)
    
    vbasic = core.bm3d.VBasic(src, radius=r).bm3d.VAggregate(radius=r, sample=1)
    vfinal = core.bm3d.VFinal(src, ref=vbasic, radius=r).bm3d.VAggregate(radius=r)
    
  • sigma: The strength of denoising for each plane.

    The strength is similar (but not strictly equal) as VapourSynth-BM3D due to differences in implementation. (coefficient normalization is not implemented, for example)

    Default [3,3,3].

  • block_step, bm_range, radius, ps_num, ps_range:

    Same as those in VapourSynth-BM3D.

    If chroma is set to True, only the first value is in effect.

    Otherwise an array of values may be specified for each plane (except radius).

    Note: It is generally not recommended to take a large value of ps_num as current implementations do not take duplicate block-matching candidates into account during temporary searching, which may leads to regression in denoising quality. This issue is not present in VapourSynth-BM3D.

    Note2: Lowering the value of "block_step" will be useful in reducing blocking artifacts at the cost of slower processing.

  • chroma:

    CBM3D algorithm. clip must be of YUV444PS format.

    Y channel is used in block-matching of chroma channels.

    Default False.

  • device_id:

    Set GPU to be used.

    Default 0.

  • fast:

    Multi-threaded copy between CPU and GPU at the expense of 4x memory consumption.

    Default True.

  • extractor_exp:

    Used for deterministic (bitwise) output. This parameter is not present in the cpu version since the implementation always produces deterministic output.

    Pre-rounding is employed for associative floating-point summation.

    The value should be a positive integer not less than 3, and may need to be higher depending on the source video and filter parameters.

    Default 0. (non-determinism)

Notes

  • bm3d.VAggregate should be called after temporal filtering, as in VapourSynth-BM3D. Alternatively, you may use the BM3Dv2() interface for both spatial and temporal denoising in one step.

  • The _rtc version has three additional experimental parameters:

    • bm_error_s: (string)

      Specify cost for block similarity measurement.

      Currently implemented costs: SSD (Sum of Squared Differences), SAD (Sum of Absolute Differences), ZSSD (Zero-mean SSD), ZSAD (Zero-mean SAD), SSD/NORM.

      Default SSD.

    • transform_2d_s/transform_1d_s: (string)

      Specify type of transform.

      Currently implemented transforms: DCT (Discrete Cosine Transform), Haar (Haar Transform), WHT (Walsh–Hadamard Transform), Bior1.5 (transform based on a bi-orthogonal spline wavelet).

      Default DCT.

    These features are not implemented in the standard version due to performance and binary size concerns.

Statistics

GPU memory consumptions:

(ref ? 4 : 3) * (chroma ? 3 : 1) * (fast ? 4 : 1) * (2 * radius + 1) * size_of_a_single_frame

Compilation

  • The CMake configuration of BM3DCUDA_RTC links to NVRTC static library by default, which requires CUDA 11.5 or later.
cmake -S . -B build -D CMAKE_BUILD_TYPE=Release -D CMAKE_CUDA_FLAGS="--threads 0 --use_fast_math -Wno-deprecated-gpu-targets" -D CMAKE_CUDA_ARCHITECTURES="50;61-real;75-real;86"

cmake --build build --config Release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vapoursynth_bm3dcpu-2.16.5.tar.gz (626.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

vapoursynth_bm3dcpu-2.16.5-py3-none-win_amd64.whl (191.1 kB view details)

Uploaded Python 3Windows x86-64

vapoursynth_bm3dcpu-2.16.5-py3-none-musllinux_1_2_x86_64.whl (1.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

vapoursynth_bm3dcpu-2.16.5-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (70.3 kB view details)

Uploaded Python 3manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

File details

Details for the file vapoursynth_bm3dcpu-2.16.5.tar.gz.

File metadata

  • Download URL: vapoursynth_bm3dcpu-2.16.5.tar.gz
  • Upload date:
  • Size: 626.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for vapoursynth_bm3dcpu-2.16.5.tar.gz
Algorithm Hash digest
SHA256 1f70527ea5ee7a6c3f395401356222a573fda01288c6fe1e10e03feebefecd51
MD5 815aeea6e754aba7e1bc0549ffcaa4a9
BLAKE2b-256 6c90da89cc4172e45ae623051daf1ad8c56866026496a74b5a76fa23c43861b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_bm3dcpu-2.16.5.tar.gz:

Publisher: publish.yml on Jaded-Encoding-Thaumaturgy/vs-wheels

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vapoursynth_bm3dcpu-2.16.5-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for vapoursynth_bm3dcpu-2.16.5-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 40ccb452c62b8d2cdc3be87f2e3f45ee3cf268a0ec414297c7be6777a4d346fb
MD5 42ffa37d6d6ab557c08bc57ecefdc966
BLAKE2b-256 b0eec91769396e7d0e098613211ca4f6baae8024b03aa0ad0437b5e1e3dffc89

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_bm3dcpu-2.16.5-py3-none-win_amd64.whl:

Publisher: publish.yml on Jaded-Encoding-Thaumaturgy/vs-wheels

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vapoursynth_bm3dcpu-2.16.5-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for vapoursynth_bm3dcpu-2.16.5-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 30780bed2303dcda5394d4c640e01c1f5c9a562cfb4b68e106e5973de3a84e34
MD5 103404457f72c9a05fb8a03702367d7e
BLAKE2b-256 7cb9b271f924d2b9674d9000c54c9a8492963cb42e5d9c879ae41a19337abdcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_bm3dcpu-2.16.5-py3-none-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on Jaded-Encoding-Thaumaturgy/vs-wheels

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vapoursynth_bm3dcpu-2.16.5-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vapoursynth_bm3dcpu-2.16.5-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6316ac659ffadfee3e642ce09903a81fccc5cfc1f084d9c5c7a0548589bda871
MD5 9f4b2254a8cc21d2d26ba87a66598826
BLAKE2b-256 3fd94a4c80a985ec32ca81b5d5012b0cc1d43f617c881c29ca176dd3c291781b

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_bm3dcpu-2.16.5-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on Jaded-Encoding-Thaumaturgy/vs-wheels

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page