欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)圖像隨機(jī)添加椒鹽噪聲和高斯噪聲

 更新時(shí)間:2022年09月02日 16:14:00   作者:PKing666666  
圖像噪聲是指存在于圖像數(shù)據(jù)中的不必要的或多余的干擾信息。在噪聲的概念中,通常采用信噪比(Signal-Noise?Rate,?SNR)衡量圖像噪聲。本文將利用Python實(shí)現(xiàn)對(duì)圖像隨機(jī)添加椒鹽噪聲和高斯噪聲,感興趣的可以了解一下

 圖像噪聲是指存在于圖像數(shù)據(jù)中的不必要的或多余的干擾信息。在噪聲的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量圖像噪聲。通俗的講就是信號(hào)占多少,噪聲占多少,SNR越小,噪聲占比越大。

1.常見(jiàn)的圖像噪聲

(1)高斯噪聲

高斯噪聲Gaussian noise,是指它的概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲,通常是因?yàn)椴涣颊彰骱透邷匾鸬膫鞲衅髟肼暋?/p>

(2) 椒鹽噪聲

椒鹽噪聲salt-and-pepper noise,又稱為脈沖噪聲,它是一種隨機(jī)出現(xiàn)的白點(diǎn)(鹽噪聲)或者黑點(diǎn)(椒噪聲),通常是由圖像傳感器,傳輸信道,解壓處理等產(chǎn)生的黑白相間的亮暗點(diǎn)噪聲(椒-黑,鹽-白)。常用的去除這種噪聲的有效手段是使用中值濾波器。

2.生成圖像噪聲

在原始圖像基礎(chǔ)上加上噪聲分量,即可生成圖像噪聲

(1)高斯噪聲

def gaussian_noise(image, mean=0.1, sigma=0.1):
    """
    添加高斯噪聲
    :param image:原圖
    :param mean:均值
    :param sigma:標(biāo)準(zhǔn)差 值越大,噪聲越多
    :return:噪聲處理后的圖片
    """
    image = np.asarray(image / 255, dtype=np.float32)  # 圖片灰度標(biāo)準(zhǔn)化
    noise = np.random.normal(mean, sigma, image.shape).astype(dtype=np.float32)  # 產(chǎn)生高斯噪聲
    output = image + noise  # 將噪聲和圖片疊加
    output = np.clip(output, 0, 1)
    output = np.uint8(output * 255)
    return output

(2) 椒鹽噪聲(速度慢)

常規(guī)的方法,需要遍歷每個(gè)像素,添加椒鹽噪聲,該方法十分緩慢。Python語(yǔ)言十分不建議進(jìn)行圖像像素遍歷操作,畢竟性能太差,速度太慢了(除非寫(xiě)成C/C++版本)。我們可以借助numpy的矩陣處理,實(shí)現(xiàn)快速的添加椒鹽噪聲。

def salt_pepper_noise(image: np.ndarray, prob=0.01):
    """
    添加椒鹽噪聲,該方法需要遍歷每個(gè)像素,十分緩慢
    :param image:
    :param prob: 噪聲比例
    :return:
    """
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            if random.random() < prob:
                image[i][j] = 0 if random.random() < 0.5 else 255
            else:
                image[i][j] = image[i][j]
    return image

(3) 椒鹽噪聲(快速版)

我們可以借助numpy的矩陣處理,實(shí)現(xiàn)快速的添加椒鹽噪聲。基本思路:利用np.random.uniform生成0~1的均勻噪聲( uniform distribution noise),然后將noise > prob的像素設(shè)置0或者255,這樣通過(guò)矩陣的處理,可以快速添加椒鹽噪聲。

def fast_salt_pepper_noise(image: np.ndarray, prob=0.02):
    """
    隨機(jī)生成一個(gè)0~1的mask,作為椒鹽噪聲
    :param image:圖像
    :param prob: 椒鹽噪聲噪聲比例
    :return:
    """
    image = add_uniform_noise(image, prob * 0.51, vaule=255)
    image = add_uniform_noise(image, prob * 0.5, vaule=0)
    return image
 
 
def add_uniform_noise(image: np.ndarray, prob=0.05, vaule=255):
    """
    隨機(jī)生成一個(gè)0~1的mask,作為椒鹽噪聲
    :param image:圖像
    :param prob: 噪聲比例
    :param vaule: 噪聲值
    :return:
    """
    h, w = image.shape[:2]
    noise = np.random.uniform(low=0.0, high=1.0, size=(h, w)).astype(dtype=np.float32)  # 產(chǎn)生高斯噪聲
    mask = np.zeros(shape=(h, w), dtype=np.uint8) + vaule
    index = noise > prob
    mask = mask * (~index)
    output = image * index[:, :, np.newaxis] + mask[:, :, np.newaxis]
    output = np.clip(output, 0, 255)
    output = np.uint8(output)
    return output

3. Demo性能測(cè)試

需要用到pybaseutils工具,pip安裝即可

# -*-coding: utf-8 -*-
"""
    @Author : panjq
    @E-mail : pan_jinquan@163.com
    @Date   : 2022-07-27 15:23:24
    @Brief  :
"""
import cv2
import random
import numpy as np
from pybaseutils import time_utils
 
 
@time_utils.performance("gaussian_noise")
def gaussian_noise(image, mean=0.1, sigma=0.1):
    """
    添加高斯噪聲
    :param image:原圖
    :param mean:均值
    :param sigma:標(biāo)準(zhǔn)差 值越大,噪聲越多
    :return:噪聲處理后的圖片
    """
    image = np.asarray(image / 255, dtype=np.float32)  # 圖片灰度標(biāo)準(zhǔn)化
    noise = np.random.normal(mean, sigma, image.shape).astype(dtype=np.float32)  # 產(chǎn)生高斯噪聲
    output = image + noise  # 將噪聲和圖片疊加
    output = np.clip(output, 0, 1)
    output = np.uint8(output * 255)
    return output
 
 
@time_utils.performance("salt_pepper_noise")
def salt_pepper_noise(image: np.ndarray, prob=0.01):
    """
    添加椒鹽噪聲,該方法需要遍歷每個(gè)像素,十分緩慢
    :param image:
    :param prob: 噪聲比例
    :return:
    """
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            if random.random() < prob:
                image[i][j] = 0 if random.random() < 0.5 else 255
            else:
                image[i][j] = image[i][j]
    return image
 
 
@time_utils.performance("fast_salt_pepper_noise")
def fast_salt_pepper_noise(image: np.ndarray, prob=0.02):
    """
    隨機(jī)生成一個(gè)0~1的mask,作為椒鹽噪聲
    :param image:圖像
    :param prob: 椒鹽噪聲噪聲比例
    :return:
    """
    image = add_uniform_noise(image, prob * 0.51, vaule=255)
    image = add_uniform_noise(image, prob * 0.5, vaule=0)
    return image
 
 
def add_uniform_noise(image: np.ndarray, prob=0.05, vaule=255):
    """
    隨機(jī)生成一個(gè)0~1的mask,作為椒鹽噪聲
    :param image:圖像
    :param prob: 噪聲比例
    :param vaule: 噪聲值
    :return:
    """
    h, w = image.shape[:2]
    noise = np.random.uniform(low=0.0, high=1.0, size=(h, w)).astype(dtype=np.float32)  # 產(chǎn)生高斯噪聲
    mask = np.zeros(shape=(h, w), dtype=np.uint8) + vaule
    index = noise > prob
    mask = mask * (~index)
    output = image * index[:, :, np.newaxis] + mask[:, :, np.newaxis]
    output = np.clip(output, 0, 255)
    output = np.uint8(output)
    return output
 
 
def cv_show_image(title, image, use_rgb=True, delay=0):
    """
    調(diào)用OpenCV顯示RGB圖片
    :param title: 圖像標(biāo)題
    :param image: 輸入是否是RGB圖像
    :param use_rgb: True:輸入image是RGB的圖像, False:返輸入image是BGR格式的圖像
    :return:
    """
    img = image.copy()
    if img.shape[-1] == 3 and use_rgb:
        img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)  # 將BGR轉(zhuǎn)為RGB
    # cv2.namedWindow(title, flags=cv2.WINDOW_AUTOSIZE)
    cv2.namedWindow(title, flags=cv2.WINDOW_NORMAL)
    cv2.imshow(title, img)
    cv2.waitKey(delay)
    return img
 
 
if __name__ == "__main__":
    test_file = "test.png"
    image = cv2.imread(test_file)
    prob = 0.02
    for i in range(10):
        out1 = gaussian_noise(image.copy())
        out2 = salt_pepper_noise(image.copy(), prob=prob)
        out3 = fast_salt_pepper_noise(image.copy(), prob=prob)
        print("----" * 10)
    cv_show_image("image", image, use_rgb=False, delay=1)
    cv_show_image("gaussian_noise", out1, use_rgb=False, delay=1)
    cv_show_image("salt_pepper_noise", out2, use_rgb=False, delay=1)
    cv_show_image("fast_salt_pepper_noise", out3, use_rgb=False, delay=0)

循環(huán)機(jī)10次,salt_pepper_noise平均耗時(shí)125.49021ms,而fast_salt_pepper_noise平均耗時(shí)6.12011ms ,性能提高60倍左右,其生成的效果是基本一致的

call gaussian_noise elapsed: avg:19.42925ms     total:194.29255ms     count:10
call salt_pepper_noise elapsed: avg:125.49021ms     total:1254.90212ms     count:10
call fast_salt_pepper_noise elapsed: avg:6.12011ms     total:61.20110ms     count:10 

原圖

高斯噪聲

salt_pepper_noise

fast_salt_pepper_noise

到此這篇關(guān)于Python實(shí)現(xiàn)圖像隨機(jī)添加椒鹽噪聲和高斯噪聲的文章就介紹到這了,更多相關(guān)Python圖像添加噪聲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解pandas.DataFrame中刪除包涵特定字符串所在的行

    詳解pandas.DataFrame中刪除包涵特定字符串所在的行

    這篇文章主要介紹了pandas.DataFrame中刪除包涵特定字符串所在的行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python案例練習(xí)合集

    python案例練習(xí)合集

    這篇文章主要介紹了python案例學(xué)習(xí)合集,主要的分享對(duì)的練習(xí)案例有python批量查詢、python批量請(qǐng)求(GET?|?POST)、python列表轉(zhuǎn)集合練習(xí),需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-02-02
  • Opencv python 圖片生成視頻的方法示例

    Opencv python 圖片生成視頻的方法示例

    這篇文章主要介紹了Opencv python 圖片生成視頻的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Pandas刪除數(shù)據(jù)的幾種情況(小結(jié))

    Pandas刪除數(shù)據(jù)的幾種情況(小結(jié))

    這篇文章主要介紹了Pandas刪除數(shù)據(jù)的幾種情況(小結(jié)),詳細(xì)的介紹了4種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python安裝及Pycharm安裝使用教程圖解

    Python安裝及Pycharm安裝使用教程圖解

    這篇文章主要介紹了Python安裝以及Pycharm安裝使用教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • pandas針對(duì)excel處理的實(shí)現(xiàn)

    pandas針對(duì)excel處理的實(shí)現(xiàn)

    這篇文章主要介紹了pandas針對(duì)excel處理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python opencv讀mp4視頻的實(shí)例

    python opencv讀mp4視頻的實(shí)例

    今天小編就為大家分享一篇python opencv讀mp4視頻的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python項(xiàng)目管理工具Rye的工作原理

    Python項(xiàng)目管理工具Rye的工作原理

    在開(kāi)發(fā)Python項(xiàng)目時(shí),有時(shí)會(huì)在一臺(tái)電腦上,同時(shí)存在多個(gè)python項(xiàng)目,而且每個(gè)項(xiàng)目的python版本和依賴可能都不一樣,此時(shí)需要使用python項(xiàng)目管理工具來(lái)進(jìn)行管理,rye是一個(gè)python項(xiàng)目管理工具,本文簡(jiǎn)單介紹rye的工作原理
    2023-07-07
  • python比較2個(gè)xml內(nèi)容的方法

    python比較2個(gè)xml內(nèi)容的方法

    這篇文章主要介紹了python比較2個(gè)xml內(nèi)容的方法,涉及Python操作XML文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 聽(tīng)歌識(shí)曲--用python實(shí)現(xiàn)一個(gè)音樂(lè)檢索器的功能

    聽(tīng)歌識(shí)曲--用python實(shí)現(xiàn)一個(gè)音樂(lè)檢索器的功能

    本篇文章中主要介紹了用python實(shí)現(xiàn)一個(gè)音樂(lè)檢索器,類似于QQ音樂(lè)的搖一搖識(shí)曲,有興趣的同學(xué)可以了解一下。
    2016-11-11

最新評(píng)論