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

本文目录一览:

用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的边缘检测,由浅入深地介绍:固定值的静态,可自调节的,自适应的。

说明:

1 环境:python3.8、opencv4.5.3和matplotlib3.4.3。

2 图片:来自品阅网正版免费图库。

3 实现自适应阈值的canny边缘检测的参考代码和文章:

上述的代码,本机均有报错,故对代码进行修改,注释和运行。

初级canny:

1 介绍:opencv中给出了canny边缘检测的接口,直接调用:

即可得到边缘检测的结果ret,其中,t1,t2是需要人为设置的阈值。

2 python的opencv的一行代码即可实现边缘检测。

3 Canny函数及使用:

4 Canny边缘检测流程:

去噪 — 梯度 — 非极大值抑制 — 滞后阈值

5 代码:

6 操作和过程:

7 原图:

8 疑问:

ret = cv2.canny(img,t1,t2),其中,t1,t2是需要人为设置的阈值,一般人怎么知道具体数值是多少,才是最佳的呀?所以,这是它的缺点。

中级canny:

1 中级canny,就是可调节的阈值,找到最佳的canny边缘检测效果。

2 采用cv2.createTrackbar来调节阈值。

3 代码:

4 操作和效果:

5 原图:

高级canny:

1 自适应canny的算法:

ret = cv2.canny(img,t1,t2)

即算法在运行过程中能够自适应地找到较佳的分割阈值t1,t2。

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 xrange(0,image.size[1]):

        for x in xrange(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 xrange(0,Z):

        t2val[(0,0)] = 1

        t2val[(image.size[0] – 1,image.size[1] – 1)] = 1

        for x in xrange(1,image.size[0] – 1):

            for y in xrange(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 xrange(0,size[0]):

        for y in xrange(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()

三. 实验结果

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

四. 参考内容:

        

原创文章,作者:ESSLH,如若转载,请注明出处:https://www.506064.com/n/317891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ESSLHESSLH
上一篇 2025-01-11 16:28
下一篇 2025-01-11 16:28

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • Python基础代码用法介绍

    本文将从多个方面对Python基础代码进行解析和详细阐述,力求让读者深刻理解Python基础代码。通过本文的学习,相信大家对Python的学习和应用会更加轻松和高效。 一、变量和数…

    编程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • Python 常用数据库有哪些?

    在Python编程中,数据库是不可或缺的一部分。随着互联网应用的不断扩大,处理海量数据已成为一种趋势。Python有许多成熟的数据库管理系统,接下来我们将从多个方面介绍Python…

    编程 2025-04-29
  • 仓库管理系统代码设计Python

    这篇文章将详细探讨如何设计一个基于Python的仓库管理系统。 一、基本需求 在着手设计之前,我们首先需要确定仓库管理系统的基本需求。 我们可以将需求分为以下几个方面: 1、库存管…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • 如何实现图像粘贴到蒙版

    本文将从多个方面介绍图像粘贴到蒙版的实现方法。 一、创建蒙版 首先,在HTML中创建一个蒙版元素,用于接收要粘贴的图片。 <div id=”mask” style=”widt…

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29
  • Python实现简易心形代码

    在这个文章中,我们将会介绍如何用Python语言编写一个非常简单的代码来生成一个心形图案。我们将会从安装Python开始介绍,逐步深入了解如何实现这一任务。 一、安装Python …

    编程 2025-04-29

发表回复

登录后才能评论