【发布时间】:2018-08-18 23:43:26
【问题描述】:
我有来自BrainWeb 的 10 次灰度脑部 MRI 扫描。它们存储为 4d numpy 数组brains,形状为(10, 181, 217, 181)。 10 个大脑中的每一个都由沿 z 平面(从头顶到颈部)的 181 个切片组成,其中每个切片在 x(耳朵到耳朵)和 y(眼睛到耳朵)中是 181 像素 x 217 像素后脑勺)飞机。
所有的大脑都是dtype('float64')。所有大脑的最大像素强度为~1328,最小值为~0。例如,对于第一个大脑,我通过brains[0].max() 给出1328.338086605072 和brains[0].min() 给出0.0003886114541273855 来计算它。下面是brain[0] 的切片图:
我想通过将像素强度从[0, 1328] 重新缩放到{0, 1} 来对所有这些大脑图像进行二值化处理。 我的方法正确吗?
我首先将像素强度标准化为[0, 1]:
normalized_brains = brains/1328
然后通过使用二项分布对每个像素进行二值化:
binarized_brains = np.random.binomial(1, (normalized_brains))
绘制的结果看起来正确:
0 像素强度表示黑色(背景),1 像素强度表示白色(大脑)。
我通过实现另一种方法来对来自this post 的图像进行归一化进行实验,但它只给了我一张黑色图像。这是因为np.finfo(np.float64)是1.7976931348623157e+308,所以归一化步骤
normalized_brains = brains/1.7976931348623157e+308
刚刚返回了一个零数组,在二值化步骤中也导致了一个零数组。
我是否使用正确的方法对图像进行二值化?
【问题讨论】:
-
你的归一化是正确的,最后你得到了一个二进制图像,所以我想这也可以。但我不知道你在这里的意图是什么。对图像进行二值化的方法有数百万种,它们都有不同的目的。您在这里所做的是一种非常糟糕的抖动形式,有更好的方法可以获得以某种方式捕获原始灰度值的二进制图像。但它们的唯一用途是在非常有限的设备上进行视觉输出。那么,你想对二值图像做什么呢?
-
我之所以想要对数据进行二值化,是因为我想尝试使用类似于here 的卷积变分自动编码器。
-
将像素建模为二元变量时,模型的重建损失计算更简单
标签: python numpy image-processing computer-vision voxel