Как убрать шум с изображения в питоне - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь удалить шум из изображения, я пытаюсь сделать белый пиксель, если определенное условие выполнено, но я изо всех сил стараюсь, чтобы это произошло.

Это мое изображение, и я хочу удалитьвсе серые цветные линии хотят только цвета высокой интенсивности, такие как синий красный и зеленый.Извините за редактирование

enter image description here

Это мой код, в котором я попытался проверить условие, которое успешно выполнено, затем я изменю пиксель на белый

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()

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Я пробовал с непрозрачностью, и это работает для меня.Тогда я использую ядро.Одна проблема с этим ответом состоит в том, что это занимает немного больше времени.Пожалуйста, дайте мне знать, если их лучше

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()
0 голосов
/ 25 июня 2018

Хотя это не лучшая практика, но вы можете достичь этого, заменив нежелательные значения интенсивности белыми значениями пикселей (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) можно изменить для получения желаемых результатов.

Вот вывод этого кода.

enter image description here

...