gpt4 book ai didi

python - 使用 numpy 进行 3d 图像压缩

转载 作者:太空宇宙 更新时间:2023-11-04 03:07:25 29 4
gpt4 key购买 nike

我有一个 3d numpy 数组,表示一个对象,其单元格为体素,体素的值从 1 到 10。我想压缩图像 (a) 使其更小,(b) 稍后快速了解通过将图像压缩到与原始图像一致的最低水平来了解图像的复杂程度。

我已经使用 SVD 对 2D 图像执行此操作并查看需要多少奇异值,但它看起来很难处理 3D 图像。如果例如我查看 S 矩阵中的对角线项,它们全为零,我期待的是奇异值。

有什么方法可以使用 svd 来压缩 3D 数组(例如,以某种方式展平)?还是其他方法更合适?如有必要,我可能会将体素值简化为 0 或 1。

最佳答案

您基本上可以将相同的原理应用于 3D 数据,而无需展平它。有一些算法可以分离 N 维矩阵,例如 CP-ALS(使用交替最小二乘法),它在包 sktensor 中实现。 .您可以使用该包分解给定等级的张量:

from sktensor import dtensor, cp_als
T = dtensor(X)
rank = 5
P, fit, itr, exectimes = cp_als(T, rank, init='random')

X 是您的数据。然后,您可以使用权重 weights = P.lmbda 重建原始数组 X 并计算重建误差,就像您对 SVD 所做的那样。

3D 数据(或一般张量)的其他分解方法包括 Tucker Decomposition或规范分解(也可在同一包中获得)。

它不是直接的 3D SVD,但是上面所有的方法都可以用来分析你的数据的主成分。

在下面找到(只是为了完整性)塔克分解的图像:

enter image description here

下面是 CP-ALS(优化算法)试图获得的分解图:

enter image description here

图片来源:

1- http://www.slideshare.net/KoheiHayashi1/talk-in-jokyonokai-12989223

2- http://www.bsp.brain.riken.jp/~zhougx/tensor.html

关于python - 使用 numpy 进行 3d 图像压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39053195/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com