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

在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. 如何将 memcached 中 item 批量导入导出?

    您不应该这样做!Memcached 是一个非阻塞的服务器.任何可能导致 memcached 暂停或瞬时拒绝服务的操作都应该值得深思熟虑.向 memcached 中批量导入数据往往不是您真正想要的!想象 ...

  2. spring-boot中的AOP

    public class User { private Integer id; private String username; private String note; public User(In ...

  3. 你在项目中哪些地方用到了 XML?

    XML 的主要作用有两个方面:数据交换和信息配置.在做数据交换时,XML 将数 据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与 解压缩后再从 XML 文件中还原相关信息进行处理 ...

  4. RabbitMQ-learning

    第一种模式=直连 P:生产者,也就是要发送消息的程序 C:消费者:消息的接受者,会一直等待消息到来. queue:消息队列,图中红色部分.类似一个邮箱,可以缓存消息:生产者向其中投递消息,消费者从其中 ...

  5. 为什么要用Spring

    1.方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合.有了Spring,用户不必再为单实例模式类.属性文件解析 ...

  6. (转载)MySQL删除所有表的外键约束、禁用外键约束

    其实如果想删除所有表可以直接如下操作: 在navicat中直接选中所有表,然后右键删除表即可,会有提示,一路确定,就会先删掉没有外键的表和字表,只要一路确定,删几批就把表都删完了,并不算太麻烦. 转: ...

  7. Collection单列集合的继承关系(集合的层次结构)

  8. Markdown语法2

    二 . 低频使用的语法 下面是相对用得少的markdown语法,但也值得学习学习. 10.区块(块引用) 要创建块引用,请在段落前添加一个 >  符号: 块引用支持多段落: 块引用支持嵌套,即引 ...

  9. 微信端页面使用-webkit-box和绝对定位时,元素上移的问题

    -webkit-box 的用法 通常,在移动端要实现水平方向平分宽度的布局,会使用 -webkit-box 来布局.它的使用方法是: <div class='parent'> <di ...

  10. react 移动端 兼容性问题和一些小细节

    react 移动端 兼容性问题和一些小细节 使用 ES6 的浏览器兼容性问题 react 对低版本的安卓webview 兼容性 iOS下 fixed与软键盘的问题 onClick 阻止冒泡 meta对 ...