最近在做一个关于模糊图片恢复的数学建模,遇到了一个大问题,特记录一下。

在matlib中有  PSF = fspecial('motion', LEN, THETA);  来生成模糊核函数,但在python没有对应的,用下面这个代替:

#! /usr/bin/env python
import sys
from matplotlib.pyplot import *
from numpy import * def Usage():
print ('='*80)
# print ('Usage: ./%s [photo_file] [kernel_size]' % sys.argv[0])
# print ('Eg: ./%s myphoto.png 3' % sys.argv[0])
# print ('='*80) def fspecial(func_name,kernel_size=3,sigma=1):
if func_name=='gaussian':
m=n=(kernel_size-1.)/2.
y,x=ogrid[-m:m+1,-n:n+1]
h=exp( -(x*x + y*y) / (2.*sigma*sigma) )
h[ h < finfo(h.dtype).eps*h.max() ] = 0
sumh=h.sum()
if sumh!=0:
h/=sumh
return h def RGB(rgb_mat,g_filter,flag=255): def foo(A,B):
t=sum(A*B)
if t>flag: return flag
return t return [foo(rgb_mat[:,:,i],g_filter) for i in range(3)] # Return a Nx3 matrix of pixels
def loadImageData(self,imagefile):
# If you don't have matplotlib but have PIL,
# you can use this to load image data.
from PIL import Image
im=Image.open(imagefile)
m,n=im.size
data=im.getdata()
imgMat=zeros((m*n,3)) for i in xrange(m*n):
imgMat[i]=data[i] return imgMat def GaussianFilter(image_file,k=3):
# Read image data
im=imread(image_file)
m,n,a=im.shape
g_im=im.copy()
print ('Load Image Data Successful!') # Initial
if im.max()>1:
flag=255
else:
flag=1
sigma=1
w=k//2
g_filter=fspecial('gaussian',k,sigma)
print ('Gaussian Kernel is setup.') print ('The Gaussian Filter is processing...')
for i in range(w,m-w):
for j in range(w,n-w):
t=RGB(im[i-w:i+w+1,j-w:j+w+1],g_filter,flag)
g_im[i,j]=t print ('Finished.')
print ('Show the photo.')
subplot(121)
title('Original')
imshow(im)
subplot(122)
title('Filtered')
imshow(g_im)
cv2.imwrite('./test.png',g_im)
show() if __name__=='__main__':
argc=len(sys.argv)
if argc<3:
Usage()
else:
image_file=src
# Kernel size
# k=int(sys.argv[2])
k = 3 GaussianFilter(image_file,k)

参考:

高斯卷积核

用python实现matlib的 生成高斯模糊核的更多相关文章

  1. python 从数据库表生成model

    python 从数据库表生成model 找了很久才找到这个,我是新手... 现在已有建好的数据库,需要基于原有数据做数据分析的web应用,我选择python+Tornado ,由于不想写SQL语句,就 ...

  2. 如何用python抓取js生成的数据 - SegmentFault

    如何用python抓取js生成的数据 - SegmentFault 如何用python抓取js生成的数据 1赞 踩 收藏 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓 ...

  3. [python]使用django快速生成自己的博客小站,含详细部署方法

    前言 人生苦短,我用python 这是之前经常听到的一句笑谈.因为新公司很多业务是用的python语言,所以这几天也一直在学习python的一些东西. 作为一个之前一直java后端的开发人员,对比ja ...

  4. 使用Python的库qrcode生成二维码

    现在有很多二维码的生成工具,在线的,或者安装的软件,都可以进行生成二维码.今天我用Python的qrcode库生成二维码.需要预先安装  Image 库 安装 用pip安装 # pip install ...

  5. System Generator 生成IP核在Vivado中进行调用

    System Generator 生成IP核在Vivado中进行调用 1.首先在Simulink中搭建硬件模型 2.查看仿真结果 3.资源分析与时序分析 4.启动vivado,关联生成的IP核 5.调 ...

  6. [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:

    [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子: mydf001=sqlContext.read.format("jdbc").o ...

  7. python小工具myqr生成动态二维码

    python小工具myqr生成动态二维码 (一)安装 (二)使用 (一)安装 命令: pip install myqr 安装完成后,就可以在命令行中输入 myqr 查看下使用帮助: myqr --he ...

  8. 查找python项目依赖并生成requirements.txt——pipreqs 真是很好用啊

    查找python项目依赖并生成requirements.txt 转自:http://blog.csdn.net/orangleliu/article/details/60958525 一起开发项目的时 ...

  9. Python中random模块生成随机数详解

    Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...

随机推荐

  1. MySQL 里记录货币用什么字段类型好?

    NUMERIC 和 DECIMAL 类型被 MySQL 实现为同样的类型,这在 SQL92 标准允 许.他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数 据.当声明一个类是这些类型之 ...

  2. java程序如何确保多线程的运行安全?

    线程的安全问题体现在: 原子性:一个或多个操作在CPU执行过程中不被中断的特性 可见性:一个线程对共享变量的修改,另一个线程能立刻看到 有序性:程序执行的顺序按照代码的先后顺序执行 导致线程存在安全问 ...

  3. 学习k8s(二)

    kubernetes-国内拉取gcr.io\quay.io镜像方法 方法1: https://hub.docker.com/r/ibmcom/ 例如: gcr.io/google_containers ...

  4. 学习GlusterFS(六)

    一.GlusterFS概述 分布式文件系统由来 在介绍之前我们先来看下文件系统及典型的NFS文件系统. 计算机通过文件系统管理,存储数据的.而现在数据信息时代中人们可获取数据成指数倍的增长,单纯通过增 ...

  5. VMware ESXi安装NVIDIA GPU显卡硬件驱动和配置vGPU

    一.驱动软件准备:从nvidia网站下载驱动,注意,和普通显卡下载驱动地址不同. 按照ESXi对应版本不同下载不同的安装包.安装包内含ESXi主机驱动和虚拟机驱动. GPU显卡和物理服务器兼容查询:( ...

  6. C语言之main方法解析(知识点1)

    1.注释       /*自带注释*/2.引包       #include <stdio.h>3.主方法    void main{}4.执行体     printf("打印& ...

  7. JS:数组中push对象,覆盖问题

    发现将对象push进数组,后面的值会覆盖前面的值,最后输出的都是最后一次的值.其实这一切都是引用数据类型惹的祸.如果你也有类似问题,可以继续看下去哦.下面代码模拟:将json对象的每个键值对,单独搞成 ...

  8. 安装并使用Junit

    在Eclipse中配置Junit的方法有两种方式: 第一种方法: 1.下载junit的jar包,目前它的版本是junit3.8.1,可以从www.junit.org上下载. 2.在要使用Junit的p ...

  9. Mybatis 多表实现多对多查询、添加操作

    Mybatis 多表实现多对多查询.添加操作 学习内容: 1. 多对多之添加操作 1.1.需求 1.2.数据库表(多对多数据库设计需要设计中间表) 1.3.类设计 1.4.Mapper 接口和 Map ...

  10. git clone 遇到的问题

    经常遇到这个问题, 所以今天决定把它记录下来 当使用git clone时,会报Please make sure you have the correct access rights and the r ...