【问题标题】:How to change intensity threshold in an image using python如何使用python更改图像中的强度阈值
【发布时间】:2017-11-21 16:55:31
【问题描述】:

我想从显微镜图像中去除背景噪音。我尝试了不同的方法(hist 均衡和形态变换方法),但我得出的结论是最好的方法是去除低强度像素。 我可以使用 Photoshop 做到这一点: 如您所见,图A是原始的。我已经包含了直方图,显示在底部插入中。在 B 中应用转换,我得到了所需的最终图像,其中背景被删除。请参阅我在 B 的底部插入中应用的转换。

我开始编写python代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt


img = cv2.imread('lamelipodia/Lam1.jpg', 1)



#get green channel to gray
img_g = img[:,:,1]

#get histogram
plt.hist(img_g.flatten(), 100, [0,100], color = 'g')

cv2.imshow('b/w',img_g)
#cv2.imwrite('bw.jpg',img_g)
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

我将图形转换为黑白

并得到直方图: 这与 Photoshop 中的类似。 我一直在浏览 google 和 SO,但虽然我发现了类似的问题,但我找不到如何修改我描述的直方图。

如何使用 python(numpy 或 openCV)应用这种转换?或者,如果您认为之前已对此做出回应,请告诉我。我很抱歉,但我一直在寻找这个。

【问题讨论】:

  • google "threshold opencv python",点击第一个点击,阅读docs.opencv.org/3.3.1/d7/d4d/tutorial_py_thresholding.html,申请:) 或者我不明白你的问题是什么。你听起来应该会操作谷歌
  • 我以前看过这个页面,但是没有一个方法对我有帮助……让我再读一遍,看看这次我能不能找到方法。无论哪种方式,我都会回到这里
  • 好吧,你是对的。我用过:ret,thresh5 = cv2.threshold(img_g,150,255,cv2.THRESH_TOZERO)。现在我明白了。如果任何像素小于 150,则将其设为零。我想这很难从函数中读取,因为 THRESH_TOZERO 改变了转换的含义。我会更新帖子,所以结果很清楚,谢谢
  • 他们实际上为每种模式提供了一个视觉示例;)写下您的问题的答案或删除问题。您不应该为问题添加解决方案
  • 不确定您阅读的是哪一页,但我给您的链接显示了evey 模式的特定示例:输入图像、输出图像,甚至是生成示例的代码。但你是对的,阅读那些东西需要练习,你必须仔细阅读。

标签: python image-processing


【解决方案1】:

以下小猪链接: docs.opencv.org/3.3.1/d7/d4d/tutorial_py_thresholding.html,目标需要的函数是:

ret,thresh5 = cv2.threshold(img_g,150,255,cv2.THRESH_TOZERO)

这并不容易阅读。 我们必须理解为: 如果 image_g 中的任何像素小于 150,则将其设为零,其余的保持与原来相同的值。 如果我们将其应用于图像,我们会得到:

如何阅读函数的诀窍在于添加的样式。例如, cv2.THRESH_BINARY 使它读作: 如果 image_g 中的任何像素小于 150,则将其设为零(黑色),其余的设为 255(白色)

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 2023-02-10
    • 2016-06-12
    • 2017-12-28
    • 1970-01-01
    • 2012-10-08
    • 2020-02-13
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多