Class: Gsplat::Compression::Png
- Inherits:
-
Object
- Object
- Gsplat::Compression::Png
- Defined in:
- lib/gsplat/compression/png.rb
Overview
Self-contained PNG and K-means Gaussian parameter compression.
Constant Summary collapse
- PNG8_PARAMETERS =
Parameter names encoded as 8-bit PNG images.
%w[scales quats opacities sh0].freeze
Instance Attribute Summary collapse
-
#kmeans_clusters ⇒ Object
readonly
Returns the value of attribute kmeans_clusters.
-
#kmeans_iterations ⇒ Object
readonly
Returns the value of attribute kmeans_iterations.
-
#sh_quantization ⇒ Object
readonly
Returns the value of attribute sh_quantization.
-
#use_sort ⇒ Object
readonly
Returns the value of attribute use_sort.
Instance Method Summary collapse
-
#compress(directory, parameters) ⇒ String
Compresses Gaussian arrays into an upstream-compatible directory.
-
#decompress(directory) ⇒ Hash{Symbol=>Numo::NArray}
Restores Gaussian arrays from a compressed directory.
-
#initialize(use_sort: true, kmeans_clusters: 256, kmeans_iterations: 8, sh_quantization: 6) ⇒ Png
constructor
A new instance of Png.
Constructor Details
#initialize(use_sort: true, kmeans_clusters: 256, kmeans_iterations: 8, sh_quantization: 6) ⇒ Png
Returns a new instance of Png.
21 22 23 24 25 26 27 |
# File 'lib/gsplat/compression/png.rb', line 21 def initialize(use_sort: true, kmeans_clusters: 256, kmeans_iterations: 8, sh_quantization: 6) @use_sort = use_sort @kmeans_clusters = Integer(kmeans_clusters) @kmeans_iterations = Integer(kmeans_iterations) @sh_quantization = Integer(sh_quantization) end |
Instance Attribute Details
#kmeans_clusters ⇒ Object (readonly)
Returns the value of attribute kmeans_clusters.
19 20 21 |
# File 'lib/gsplat/compression/png.rb', line 19 def kmeans_clusters @kmeans_clusters end |
#kmeans_iterations ⇒ Object (readonly)
Returns the value of attribute kmeans_iterations.
19 20 21 |
# File 'lib/gsplat/compression/png.rb', line 19 def kmeans_iterations @kmeans_iterations end |
#sh_quantization ⇒ Object (readonly)
Returns the value of attribute sh_quantization.
19 20 21 |
# File 'lib/gsplat/compression/png.rb', line 19 def sh_quantization @sh_quantization end |
#use_sort ⇒ Object (readonly)
Returns the value of attribute use_sort.
19 20 21 |
# File 'lib/gsplat/compression/png.rb', line 19 def use_sort @use_sort end |
Instance Method Details
#compress(directory, parameters) ⇒ String
Compresses Gaussian arrays into an upstream-compatible directory.
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/gsplat/compression/png.rb', line 34 def compress(directory, parameters) FileUtils.mkdir_p(directory) values, side = GridSort.prepare(parameters, use_sort: use_sort) values["means"] = log_transform(values.fetch("means")) values["quats"] = Math::Quaternion.normalize(values.fetch("quats")) = values.to_h do |name, value| validate_name!(name) [name, compress_parameter(directory, name, value, side)] end File.write(File.join(directory, "meta.json"), "#{JSON.pretty_generate()}\n") directory end |
#decompress(directory) ⇒ Hash{Symbol=>Numo::NArray}
Restores Gaussian arrays from a compressed directory.
51 52 53 54 55 56 57 58 59 |
# File 'lib/gsplat/compression/png.rb', line 51 def decompress(directory) = JSON.parse(File.read(File.join(directory, "meta.json"))) values = .to_h do |name, entry| validate_name!(name) [name.to_sym, decompress_parameter(directory, name, entry)] end values[:means] = inverse_log_transform(values.fetch(:means)) values end |