【问题标题】:when equalizing images, skimage adds entropy and changes histogram when saving the images, how to preserve the equalized image?均衡图像时,skimage在保存图像时添加熵并更改直方图,如何保存均衡图像?
【发布时间】:2020-11-01 09:16:30
【问题描述】:

我有以下图片:

我正在做以下事情

  • 首先我阅读了一个图像img = skimage.io.imread('original.jpg'),它具有以下直方图:
  • 然后,应用he_img = skimage.exposure.equalize_hist(a)后,我得到以下直方图:
  • 但是当我保存时,然后加载并查看该图像的直方图,我得到以下信息:
    skimage.io.imsave(fname = 'he.jpg', arr= he_img)
    saved = skimage.io.imread('he.jpg')

为了能够保存均衡图像,我还需要在我的过程中添加什么?

【问题讨论】:

  • 这看起来像是一个非常均衡的直方图。问题是什么?您看到的直方图差异可能是因为图像被转换为​​ 8 位无符号整数以写入文件。
  • 问题是保存图像时,再次加载时我没有在第二个直方图中显示直方图,可能是您提到的问题。知道如何不将图像转换为 8 位吗?我想在加载图像时重现相同的第二个直方图
  • 您需要将图像保存为浮点格式。你可以用 TIFF 做到这一点,但我不知道哪些标准库支持浮动 TIFF。您也可以将其写为矩阵,而不是图像格式。 numpy.org/doc/stable/reference/generated/numpy.save.html
  • 其实问题在于 jpg 使用了有损压缩算法。原来TIFF是一种无损压缩格式,但我使用PNG,因为它是一种更常见的格式,它解决了问题。但是非常感谢,您的回答引导我找出真正的问题

标签: image-processing python-imaging-library scikit-image


【解决方案1】:

问题在于我使用的是JPGJPG 使用有损压缩来保存图像,给图像添加噪声影响均衡并增加图像熵。

为了解决这个问题,我尝试了PNG,这是一种用于存储图像的无损压缩格式。代码如下:

img = skimage.io.imread('original.jpg')
hist_equalized_img = skimage.exposure.equalize_hist(img)
skimage.io.imsave(fname = 'he.png', arr= hist_equalized_img)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2020-01-27
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多