python - skimage.util 中错误的像素值缩放(替代 Scipy 中的字节缩放)
问题描述
使用最新版本的 SciPy,该bytescale()
功能已被删除。所以我尝试了 scikit-image 的替代方案。虽然bytescale()
(scipy) 将正确缩放的 uint16 图像 (.tif) 转换为 uint8 图像,但util.img_as_ubyte()
(skimage) 返回一个图像,其最高灰度值为 8,最低为 0,而不是 255 和 0。我需要一个 uint8 图像用于进一步的图像处理(Otsu 和 Canny 边缘检测),一切都与 skimage 的字节尺度完美配合,但是一旦我尝试 SciPy 版本,一切都变得一团糟。
代码片段如下:
...
import numpy as np
from scipy.misc import bytescale
from skimage import io, util
def convertToByteImg(imagePath)
image = io.imread(imagePath)
img1 = util.img_as_ubyte(image)
img2 = bytescale(image)
...
解决方案
bytescale
始终将输入图像的范围扩展到 uint8 (0-255) 的最大范围。这有时是您想要的,但有时不是,因为您丢失了有关数据集中不同图像的相对范围的信息。在这种情况下,您的输入图像必须具有大约在 [0, 2048] 的范围,同时img_as_ubyte
将范围 [0, 65535] 重新调整为 [0, 255]。
假设您要将输入图像扩展到整个范围,您需要skimage.exposure.rescale_intensity
:
from skimage import io, util, exposure
# narrow range 16-bit
image = io.imread(image_path)
# full range 16-bit
image_rescaled = exposure.rescale_intensity(image)
# full range 8-bit
image_uint8 = util.img_as_ubyte(image_rescaled)
推荐阅读
- reactjs - 反应管理员 | 文本输入更改值
- javascript - 我已经使用了 Clipping Now 我想限制图像在织物 Js 中穿过矩形右上角或矩形底部后的移动
- mongodb - mongdb 支持连接查询吗?
- c - 将“页面写入计数”功能添加到 SIGSEGV 信号处理程序
- c++ - std:find() 用于排序与未排序
- azure - 使用 REST API 下载 Azure Devops Repository 的存档
- vba - IE 自动化 - VBA 错误 - 运行时错误 70:权限被拒绝
- wordpress - Wordpress 站点多次接收来自同一 IP 的请求
- java - 如何在 HashMap 中保留重复项
- angular - 如何解决我的分页错误指示“它在类型上不存在”?