原理:

二维高斯函数

python的N个小功能(高斯模糊原理及实践)-LMLPHP

1)         为了计算权重矩阵,需要设定σ的值。假定σ=1.5,则模糊半径为1的权重矩阵如下:

python的N个小功能(高斯模糊原理及实践)-LMLPHP

2)         这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵。

python的N个小功能(高斯模糊原理及实践)-LMLPHP

有了权重矩阵,就可以计算高斯模糊的值了。

3)         假设现有9个像素点,灰度值(0-255)如下:

python的N个小功能(高斯模糊原理及实践)-LMLPHP

4)         每个点乘以自己的权重值:

python的N个小功能(高斯模糊原理及实践)-LMLPHP

5)         得到

python的N个小功能(高斯模糊原理及实践)-LMLPHP

将这9个值加起来,就是中心点的高斯模糊的值。

对所有点重复这个过程,就得到了高斯模糊后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。

############################################################################################高斯模糊,按照给定的txt文档每4个数据模糊相应位置#################

###############################################################################

# -*- coding: utf-8 -*-

"""

Created on Tue Mar 07 14:00:00 2017

@author: sl

"""

import os

from PIL import Image, ImageFilter

class MyGaussianBlur(ImageFilter.Filter):

name = "GaussianBlur"

def __init__(self, radius=2, bounds=None):

self.radius = radius

self.bounds = bounds

def filter(self, image):

if self.bounds:

clips = image.crop(self.bounds).gaussian_blur(self.radius) ###图片的最前头拷贝一部分图片(使用crop函数),进行高斯模糊处理

image.paste(clips, self.bounds)  ###粘贴到需要修改的图片上,来完成相应覆盖

return image

else:

return image.gaussian_blur(self.radius)

image = Image.open(r"G:\test.jpg")

i=0

a=0

b=0

c=0

d=0

j=0

num=0

for line in open(r"G:\a.txt"):

j=j+1

num=j

if num!=0:

for line in open(r"G:\a.txt"):

i=i+1

if((i%4)==1):

a=int(line)

elif((i%4)==2):

b=int(line)

elif((i%4)==3):

c=int(line)

else:

d=int(line)

if((i%num)==4):

h=min(20,int((c-a)/4))

w=min(20,int((d-b)/4))

bounds = (a+h,b+w,c-h,d-w)

image = image.filter(MyGaussianBlur(radius=29, bounds=bounds))

elif((i%num)==8):

h=min(5,int((c-a)/4))

w=min(5,int((d-b)/4))

bounds = (a+h,b+w,c-h,d-w)

image = image.filter(MyGaussianBlur(radius=29, bounds=bounds))

else:

h=min(10,int((c-a)/4))

w=min(10,int((d-b)/4))

bounds = (a+h,b+w,c-h,d-w)

image = image.filter(MyGaussianBlur(radius=29, bounds=bounds))

if num==16:

image.save('G:\\aaa.jpg')

else:

image.save('G:\\pp\\aaa.jpg')

05-11 15:48