1. 程式人生 > >圖片高斯模糊[python]

圖片高斯模糊[python]

簡介

畢業設計圖片處理部分需要模擬日常生活中的一些圖片模糊情況,於是在百度百科”高斯模糊”後自己簡單實現了下,高斯模糊原理很簡單,就是用高斯分佈對影象畫素值進行卷積。本篇部落格建議看完百度百科後再看。

高斯函式(正太分佈)

一維高斯分佈

  1. 公式
    σ 為標準差,u為均值,標準差越大,影象越扁,標準差越小,影象越陡。
    這裡寫圖片描述
  2. 分佈圖像
    這裡寫圖片描述

二維高斯分佈

  1. 公式
    這裡寫圖片描述
  2. 分佈圖像
    這裡寫圖片描述

高斯分佈賊TM優美,具有高度的對稱性。

高斯模糊演算法(以二維高斯分佈舉例,radius=1, σ = 0.84089642)

  1. 計算權重矩陣W,直觀來看如下圖所示,W為3x3矩陣,將9個值相加得到和sum,W := W/sum即可得到權重矩陣W
    這裡寫圖片描述
  2. 進行卷積,x、y方向步長為1。即用(2radius)×(2radius)×3(RGB通道數)的過濾器對影象進行卷積,卷積後的和為新的畫素值。

程式碼

from PIL import Image, ImageFilter
import numpy as np
import math
import matplotlib.pyplot as plt
import time

# 對影象進行搞死模糊處理, RGB 3通道影象,未優化
# 輸入image_array.shape = (width, height, channels), radius=半徑
def gaussian_blur(image_array, radius)
:
#1.權重矩陣 weight_matrix = np.zeros((2*radius+1, 2*radius+1)) for i in range(2*radius+1): for j in range(2*radius+1): weight_matrix[i, j] = GussianFunction2D(i-radius, j-radius) weight_matrix /= weight_matrix.sum() #2.根據權重矩陣weight_matrix更新新的影象畫素值 image_array_gau = np.zeros(image_array.shape) for
i in range(image_array.shape[0]-2*radius): for j in range(image_array.shape[1]-2*radius): for k in range(3): # 時間完全耗在這一步運算上了 a = np.multiply(weight_matrix, image_array[i:(i+2*radius+1), j:(j+2*radius+1), k]) image_array_gau[i+radius, j+radius, k] = a.sum() return image_array_gau/255 # 計算二維高斯函式的值G(x, y) def GussianFunction2D(x, y): sigma = 2.5 #sigma為標準差,sigma越大, 高斯函式影象越扁, 則模糊效果越明顯; sigma越小, 趨向0的話, 則模糊效果越差越接近真實影象 return (1/(2*math.pi*sigma**2)) * math.e**(-(x**2 + y**2)/(2*sigma**2)) rs_dir = '/home/wanglei/wl/face-enhance/resource' image = Image.open(rs_dir + '/yangmi1.jpg') # image = image.filter(ImageFilter.GaussianBlur(radius=3)) # image.show() image_array = np.array(image) time1 = time.time() image_array_gau = gaussian_blur(image_array, 5) time2 = time.time() print('二維卷積耗時:' + str(time2-time1)) plt.figure('GaussianBlur') plt.imshow(image_array_gau) plt.show()

實驗結果

原圖:
這裡寫圖片描述
模糊後圖:
這裡寫圖片描述

結束語

高斯模糊原理及其簡單,不詳細說明,推薦一篇及其詳細的部落格連結和百度百科連結,不管怎麼說,上手寫下程式碼很容易理解,具體的優化不戲說。
Python下實現圖片的高斯模糊化
高斯模糊-百度百科