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


    原理:

    二维高斯函数

      

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

     

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

     

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

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

     

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

     

    5)         得到

     

    将这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: est.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')

  • 相关阅读:
    ICL7135的C程序
    数组属性的习题、Arrays工具、二维数组
    上传文件js端处理
    Java常见的系统路径与获取方法
    java 文件流的处理 文件打包成zip
    JAVA根据URL网址获取输入流
    nginx安装教程
    jackson 实体转json json字符串转实体
    java 对象重写tostring
    java 将文件流和文件名称转换为文件
  • 原文地址:https://www.cnblogs.com/dudumiaomiao/p/6514637.html
Copyright © 2020-2023  润新知