【问题标题】:How to remove noise from image in python如何在python中去除图像中的噪声
【发布时间】:2018-06-25 12:11:53
【问题描述】:

我正在尝试从图像中去除噪点,如果满足某些条件,我正在尝试制作白色像素,但我正在努力实现这一目标。

这是我的图像,我想删除所有灰色线条只想要高强度颜色,如蓝红色和绿色 . 对不起我的编辑

这是我的代码,我尝试检查成功的条件,然后我将像素更改为白色

height, width = image.shape[0:2]
for i in range(0, height):  # looping at python speed...
    for j in range(0, width):
        # print(image)
        if ((image[i][j][1] * 255 == image[i][j][2] * 255 == image[i][j][3] * 255) or (
                (image[i][j][0] * 255 == image[i][j][1] * 255) and (
                image[i][j][3] * 255 >= 245))):
            # print(image[i][j][2] * 255)
            image[i][j] = 0

plt.imshow(image)
plt.savefig("filename.png")
plt.show()

【问题讨论】:

  • 您可以通过使用灰度图像上的内置阈值函数之一创建蒙版来获得所需的结果。如果这不起作用,那么您可以重复阈值处理以在每个通道上创建一个遮罩并将它们组合起来。文档很好。
  • 谢谢我试试

标签: python matplotlib image-processing noise-reduction


【解决方案1】:

我尝试过不透明度,它对我有用。然后我使用内核。这个答案的一个问题是它需要更多的时间。如果他们有更好的方法,请告诉我

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

image = plt.imread('../heatmapwms.png')

height, width = image.shape[0:2]
for i in range(0, height):  
    for j in range(0, width):
        if (image[i][j][3] <= .34 or (
                (image[i][j][2] * 255 > 170) and (image[i][j][1] * 255 > 150) and (image[i][j][0] * 255 > 150))):
            image[i][j] = 0

kernel = np.ones((3, 3), np.float32) / 9
image = cv2.filter2D(image, -1, kernel)

for i in range(0, height):  
    for j in range(0, width):
        if (image[i][j][3] <= .30 or (
                (image[i][j][2] * 255 > 170) and (image[i][j][1] * 255 > 150) and (image[i][j][0] * 255 > 150))):
            image[i][j] = 0

kernel = np.ones((3, 3), np.float32) / 9
image = cv2.filter2D(image, -1, kernel)

plt.imshow(image)
plt.savefig("filename.png")
plt.show()

【讨论】:

  • 这个逻辑的结果是什么?
  • @Abhijeet 谢谢你,你为什么用 image[i][j][3] 而不是 image[i][j][2],因为单个图像通常是 3 个通道而不是4 ?谢谢
【解决方案2】:

虽然这不是最佳做法,但您可以通过将不需要的强度值替换为白色像素值 (255) 来实现这一点。

使用skimage,您可以如下实现。

from skimage import io
import numpy as np

img = io.imread('your_image_file.png')

img[(img > 215) & (img < 235)] = 255

可以更改值范围的阈值(从 215 到 235)以获得所需的结果。

这是这段代码的输出。

【讨论】:

  • 感谢您的回答,但它也会去除高强度的蓝色
  • 这就是我要求改变强度范围的原因,这将是更多的打击和试验。
  • 是的,我正在尝试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2021-02-28
  • 2017-06-23
  • 2014-05-22
  • 2013-08-01
相关资源
最近更新 更多