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/zh-tw/n/317891.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ESSLH的頭像ESSLH
上一篇 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滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 如何實現圖像粘貼到蒙版

    本文將從多個方面介紹圖像粘貼到蒙版的實現方法。 一、創建蒙版 首先,在HTML中創建一個蒙版元素,用於接收要粘貼的圖片。 <div id=”mask” style=”widt…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29

發表回復

登錄後才能評論