【问题标题】:problems low contrast image(contrast stretching) in matplotlibmatplotlib 中的低对比度图像(对比度拉伸)问题
【发布时间】:2013-09-16 20:21:44
【问题描述】:

读取低对比度图像时,它会自动采用以下示例:

In [1]: from PIL import Image
In [2]: import numpy as np
In [3]: import matplotlib.pyplot as plt
In [4]: img = Image.open('images/map.jpg')
In [5]: arr = np.asarray(img)
In [6]: plt.gray()
In [7]: plt.imshow(arr)
Out[7]: <matplotlib.image.AxesImage at 0x7f9c7e88f490>
In [8]: plt.show()

输入

large

绘图(没有变化,这是 matplotlib 自动进行的。)

large

因为这个输入与没有修改任何东西的情节不同。

我需要低对比度图像来实现对比度拉伸算法

阅读本书amazon 数字图像处理(Rafael C. Gonzalez、Richard E. Woods)

PS:matplotlib 正在转换自动。我不需要。

【问题讨论】:

  • 你知道如何实现一个算法来找到更好的对比度吗?
  • 等一下,您需要调整 matplotlib 输出还是要实际实现一个算法来做到这一点?如果后者google“直方图均衡”
  • 在 matplotlib 中是自动的,我不需要。我自己想实现算法
  • 太好了...但是您的问题是什么?你被困在哪里了?
  • matplotlib 正在转换自动。我不需要。无法实现,因为它会自动转换(matplotlib)。

标签: python matplotlib pillow


【解决方案1】:

如果您不想自动缩放颜色图,可以使用vminvmax 设置您喜欢的范围,如下所示:

plt.imshow(arr, vmin=0, vmax=255)

当显示一个 numpy 数组时,matplotlib 只能自动知道实际输入数据的范围(而不是从中获取的范围),因此它需要完整的 input 范围并将其映射到完整的输出范围。但如果您知道输入数据的不同范围,则可以使用vminvmax 来指定。

【讨论】:

  • 好的。已经在查看使用它的代码,但没有引起注意。我怎么知道哪个 vmax 和 vmax(想象一下我有几种不同的类型)。接着就,随即? arr.min(), arr.max() (144, 225) 假设 vmin 总是等于 0?
  • 我不是很懂你们的cmets,但是对于一个图像来说,通常是vmin=0的情况。
  • @neiesc imshow 默认使用 vmin=min(arr)vmax=max(arr)。您通常对输入值有所了解,例如最大和最小 可能 值。如果您的输入数据是 unit8,则最小值为 0,最大值为 255。
猜你喜欢
  • 2013-02-28
  • 2018-12-02
  • 2021-02-25
  • 2017-07-04
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多