python图像去噪常用代码,python白噪声检验代码

发布时间:2022-11-18

本文目录一览:

  1. 用opencv去噪
  2. 3种python3的canny边缘检测之静态,可调节和自适应
  3. 怎样用python实现图像去噪
  4. python图像处理代码,望大神详细解释。越详细越好
  5. 中值滤波

用opencv去噪

使用opencv-python的内置函数,对图片进行降噪处理。 8Fourier变换的应用——图像去噪 给出的图片是RGB图片,也就是需要有三个通道。 下面的函数用来去噪。

img = np.uint8(cv2.fastNlMeansDenoisingColored(img, None, 10, 10, 7, 21))

对这个图片进行局部自适应二值化处理:

img = hui(img)
th1 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 31, 5)

另一种局部自适应二值化处理:

th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 5)

在第一步连续执行两次去噪,得到的三幅图片是: 执行三次降噪。 连续10次降噪。

3种python3的canny边缘检测之静态,可调节和自适应

先看高级版的python3的canny的自适应边缘检测: 内容:

  1. canny的边缘检测的介绍。
  2. 三种方法的canny的边缘检测,由浅入深地介绍:固定值的静态,可自调节的,自适应的。 说明:
  3. 环境:python3.8、opencv4.5.3和matplotlib3.4.3。
  4. 图片:来自品阅网正版免费图库。
  5. 实现自适应阈值的canny边缘检测的参考代码和文章: 上述的代码,本机均有报错,故对代码进行修改,注释和运行。

初级canny

  1. 介绍:opencv中给出了canny边缘检测的接口,直接调用即可得到边缘检测的结果 ret,其中,t1t2 是需要人为设置的阈值。
  2. Python的opencv的一行代码即可实现边缘检测。
  3. Canny函数及使用:
  4. Canny边缘检测流程:去噪 -- 梯度 -- 非极大值抑制 -- 滞后阈值
  5. 代码:
  6. 操作和过程:
  7. 原图:
  8. 疑问:ret = cv2.Canny(img, t1, t2),其中,t1t2 是需要人为设置的阈值,一般人怎么知道具体数值是多少,才是最佳的呀?所以,这是它的缺点。

中级canny

  1. 中级canny,就是可调节的阈值,找到最佳的canny边缘检测效果。
  2. 采用 cv2.createTrackbar 来调节阈值。
  3. 代码:
  4. 操作和效果:
  5. 原图:

高级canny

  1. 自适应canny的算法:ret = cv2.Canny(img, t1, t2),即算法在运行过程中能够自适应地找到较佳的分割阈值 t1t2
  2. 文件结构:
  3. main.py代码:
  4. dog.py代码:
  5. bilateralfilt.py代码:
  6. 原图:
  7. 效果图:本文第一个gif图,此处省略。

小结

  1. 本文由浅入深,总结的很好,适合收藏。
  2. 对于理解python的opencv的canny的边缘检测,很有帮助。
  3. 本文高级版canny自适应的算法参考2篇文章,虽然我进行代码的删除,注释,修改,优化等操作,故我不标注原创,对原作者表达敬意。
  4. 自己总结和整理,分享出来,希望对大家有帮助。

怎样用python实现图像去噪

# coding:utf-8
import sys, os
from PIL import Image, ImageDraw
# 二值数组
t2val = {}
def twoValue(image, G):
    for y in range(0, image.size[1]):
        for x in range(0, image.size[0]):
            g = image.getpixel((x, y))
            if g > G:
                t2val[(x, y)] = 1
            else:
                t2val[(x, y)] = 0
# 降噪
# 根据一个点A的RGB值,与周围的8个点的RBG值比较,设定一个值N(0 < N < 8),当A的RGB值与周围8个点的RGB相等数小于N时,此点为噪点
# G: Integer 图像二值化阀值
# N: Integer 降噪率 0 < N < 8
# Z: Integer 降噪次数
# 输出
# 0:降噪成功
# 1:降噪失败
def clearNoise(image, N, Z):
    for i in range(0, Z):
        t2val[(0, 0)] = 1
        t2val[(image.size[0] - 1, image.size[1] - 1)] = 1
        for x in range(1, image.size[0] - 1):
            for y in range(1, image.size[1] - 1):
                nearDots = 0
                L = t2val[(x, y)]
                if L == t2val[(x - 1, y - 1)]:
                    nearDots += 1
                if L == t2val[(x - 1, y)]:
                    nearDots += 1
                if L == t2val[(x - 1, y + 1)]:
                    nearDots += 1
                if L == t2val[(x, y - 1)]:
                    nearDots += 1
                if L == t2val[(x, y + 1)]:
                    nearDots += 1
                if L == t2val[(x + 1, y - 1)]:
                    nearDots += 1
                if L == t2val[(x + 1, y)]:
                    nearDots += 1
                if L == t2val[(x + 1, y + 1)]:
                    nearDots += 1
                if nearDots < N:
                    t2val[(x, y)] = 1
def saveImage(filename, size):
    image = Image.new("1", size)
    draw = ImageDraw.Draw(image)
    for x in range(0, size[0]):
        for y in range(0, size[1]):
            draw.point((x, y), t2val[(x, y)])
    image.save(filename)
image = Image.open("d:/1.jpg").convert("L")
twoValue(image, 100)
clearNoise(image, 4, 1)
saveImage("d:/5.jpg", image.size)

python图像处理代码,望大神详细解释。越详细越好

# 初始化一个矩形 np.max(marks)+1 行,3 列,默认值为 0
colorTab = np.zeros((np.max(marks) + 1, 3))
# 遍历数组,给每行的3列赋值,就是RGB颜色值,8位的
for i in range(len(colorTab)):
    aa = np.random.uniform(0, 255)
    bb = np.random.uniform(0, 255)
    cc = np.random.uniform(0, 255)
    colorTab[i] = np.array([aa, bb, cc], np.uint8)
# 初始化另一个跟img图像形状大小一样的图像,一副黑色图像
bgrImage = np.zeros(img.shape, np.uint8)
# 遍历marks形状的行列
for i in range(marks.shape[0]):
    for j in range(marks.shape[1]):
        index = marks[i][j]
        # 判断是不是区域与区域之间的分界,如果是边界(-1),则使用白色显示
        if index == -1:
            bgrImage[i][j] = np.array([255, 255, 255])  # 像素点设置为白色
        else:
            bgrImage[i][j] = colorTab[index]  # 像素点设置为上边随机生成的颜色值
# 显示处理后的图像
cv2.imshow('After ColorFill', bgrImage)
# 总结,先生成一个跟marks相同数量的row*col的一张颜色表,然后创建一个跟marks相同大小的一副黑色图像
# 最后对黑色图像画出白色边界和内部随机彩色像素值

中值滤波

一. 中值滤波:

中值滤波器是一种可以使图像平滑的滤波器。它使用滤波器范围内的像素的中值去代表该范围内所有的像素。中值滤波是消除图像噪声最常见的手段之一,特别是消除椒盐噪声,中值滤波的效果要比均值滤波更好。

二. Python实现中值滤波和均值滤波,并用两种滤波器对受到椒盐噪声污染的图像进行去噪

import cv2
import numpy as np
# Median filter
def median_filter(img, K_size=3):
    H, W, C = img.shape
    ## Zero padding
    pad = K_size // 2
    out = np.zeros((H + pad*2, W + pad*2, C), dtype=np.float)
    out[pad:pad+H, pad:pad+W] = img.copy().astype(np.float)
    tmp = out.copy()
    # filtering
    for y in range(H):
        for x in range(W):
            for c in range(C):
                out[pad+y, pad+x, c] = np.median(tmp[y:y+K_size, x:x+K_size, c])
    out = out[pad:pad+H, pad:pad+W].astype(np.uint8)
    return out
# Average filter
def average_filter(img, G=3):
    out = img.copy()
    H, W, C = img.shape
    Nh = int(H / G)
    Nw = int(W / G)
    for y in range(Nh):
        for x in range(Nw):
            for c in range(C):
                out[G*y:G*(y+1), G*x:G*(x+1), c] = np.mean(out[G*y:G*(y+1), G*x:G*(x+1), c]).astype(np.int)
    return out
# Read image
img = cv2.imread("../paojie_sp.jpg")
# Median Filter and Average Filter
out1 = median_filter(img, K_size=3)
out2 = average_filter(img, G=3)
# Save result
cv2.imwrite("out1.jpg", out1)
cv2.imwrite("out2.jpg", out2)
cv2.waitKey(0)
cv2.destroyAllWindows()

三. 实验结果

可以明显看出,对于受到椒盐噪声污染的图像,中值滤波往往比均值滤波的去噪效果要好!

四. 参考内容:

(略)