python - 如何使用 skimage.exposure.equalize_adapthist() 保存 tif 图像
问题描述
我正在研究一组显微图像,并试图为它们找到正确的阈值。我使用这些代码行:
from skimage import io, img_as_float
from skimage.restoration import denoise_nl_means, estimate_sigma
from skimage import exposur
from skimage.io import imsave
img = img_as_float(io.imread(image))
sigma_est = np.mean(estimate_sigma(img, multichannel = True))
patch_kw = dict(patch_size = 5, patch_distance = 6, multichannel = True)
denoise_img = denoise_nl_means(img, h = 15 * sigma_est, fast_mode = True,
** patch_kw)
eq_img = exposure.equalize_adapthist(denoise_img)
imsave("Contrast_DAPI.tif", eq_img)
当我运行这段代码时,我得到一个比我的原始图像大四倍的文件,并且它不能被包括 Python 在内的任何东西打开。如果我将格式从 tif 更改为 png,我只能保存它。但是,然后我收到此警告消息:“从 float64 到 uint8 的有损转换。范围 [0, 1]。在保存之前将图像转换为 uint8 以抑制此警告。”
有人可以帮忙吗?在这种情况下如何保存 tif 文件?
谢谢
解决方案
问题是您将图像保存为 float64 数据类型。有关数据类型的更多信息,请阅读scikit-image 文档中的“图像数据类型及其含义”。tifffile 库很乐意保存 float64,但许多 tiff 阅读器不会阅读它们。
根据您的下游应用程序,您可以使用skimage.util.img_as_ubyte
或skimage.util.img_as_uint
转换为 8 位或 16 位整数数组,然后以与您相同的方式保存。下游库会更快乐,你几乎肯定不需要 64 位浮点的完整精度——这种格式有助于将许多操作链接在一起而不会丢失精度,但如果你要计算阈值,则没有必要下一步。
推荐阅读
- java - Eclipse - 如何查看哪些项目对选定项目具有 Maven 依赖关系
- sql - 将多个数据行滚动到 1 行,如果为 NULL,则显示“NA”或“None”
- c# - 需要无效的 SqlGeography 来测试 MakeValid
- go - 如何使用 Go 检索本地计算机 Windows 证书存储列表?
- amazon-web-services - Amazon Cognito + iOS Swift - 自定义 UI
- eclipse-plugin - 唯一标识函数定义节点
- python - Python 字符串索引超出范围,s[0] 和 s[:1] 之间的差异
- android-studio-3.0 - 在我的 android 项目中:内部元素必须是资源引用或为空
- c# - 如何将 DbContextPool 与 Singleton 一起使用?
- postgresql - postgresql 在插入时使现有主键自动递增