用python实现matlib的 生成高斯模糊核
最近在做一个关于模糊图片恢复的数学建模,遇到了一个大问题,特记录一下。
在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的 生成高斯模糊核的更多相关文章
- python 从数据库表生成model
python 从数据库表生成model 找了很久才找到这个,我是新手... 现在已有建好的数据库,需要基于原有数据做数据分析的web应用,我选择python+Tornado ,由于不想写SQL语句,就 ...
- 如何用python抓取js生成的数据 - SegmentFault
如何用python抓取js生成的数据 - SegmentFault 如何用python抓取js生成的数据 1赞 踩 收藏 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓 ...
- [python]使用django快速生成自己的博客小站,含详细部署方法
前言 人生苦短,我用python 这是之前经常听到的一句笑谈.因为新公司很多业务是用的python语言,所以这几天也一直在学习python的一些东西. 作为一个之前一直java后端的开发人员,对比ja ...
- 使用Python的库qrcode生成二维码
现在有很多二维码的生成工具,在线的,或者安装的软件,都可以进行生成二维码.今天我用Python的qrcode库生成二维码.需要预先安装 Image 库 安装 用pip安装 # pip install ...
- System Generator 生成IP核在Vivado中进行调用
System Generator 生成IP核在Vivado中进行调用 1.首先在Simulink中搭建硬件模型 2.查看仿真结果 3.资源分析与时序分析 4.启动vivado,关联生成的IP核 5.调 ...
- [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:
[Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子: mydf001=sqlContext.read.format("jdbc").o ...
- python小工具myqr生成动态二维码
python小工具myqr生成动态二维码 (一)安装 (二)使用 (一)安装 命令: pip install myqr 安装完成后,就可以在命令行中输入 myqr 查看下使用帮助: myqr --he ...
- 查找python项目依赖并生成requirements.txt——pipreqs 真是很好用啊
查找python项目依赖并生成requirements.txt 转自:http://blog.csdn.net/orangleliu/article/details/60958525 一起开发项目的时 ...
- Python中random模块生成随机数详解
Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...
随机推荐
- Where和having都是条件筛选关键字,它们有什么分别?
WHERE是在数据分组前进行条件过滤, HAVING子句是在数据分组后进行条件过滤,WHERE子句中不能使用聚合函数,HAVING子句可以使用聚合函数. 需要注意说明:当同时含有where子句.gro ...
- unable to resolve class XXX
> Task :HelloWorld_Web:compileGroovy startup failed: E:\GradleDemoManyModules\ExampleHelloWorld\H ...
- synchronized 关键字的用法?
synchronized 关键字可以将对象或者方法标记为同步,以实现对对象和方法的互 斥访问,可以用 synchronized(对象) { - }定义同步代码块,或者在声明方法时 将 synchron ...
- 部署新项目自动对数据库进行migrate和让用户收到创建用户/超级用户信息
当项目中的models有数据表的时候,普通做法是用docke exec -it hello_web_1 bash,进入容器进行migrate,但是我们想要容器一启动就自动创建数据表,可以修改docke ...
- chubby 是什么,和 zookeeper 比你怎么看?
chubby 是 google 的,完全实现 paxos 算法,不开源.zookeeper 是 chubby的开源实现,使用 zab 协议,paxos 算法的变种.
- 学习saltstack (六)
Slatstack 介绍 官网:https://saltstack.com/ 官方源:http://repo.saltstack.com/ (介绍各操作系统安装方法) centos 6源 ? 1 y ...
- 经历了源码的痛苦,掌握DRF的核心序列化器
目录 DRF的核心--序列化器 序列化器 什么是序列化和反序列化? 序列化 序列化demo 字段类型 字段参数 序列化自定制返回字段 方法一:在序列化类(serializers.py)中写 方法二:在 ...
- Citus 分布式 PostgreSQL 集群 - SQL Reference(查询处理)
一个 Citus 集群由一个 coordinator 实例和多个 worker 实例组成. 数据在 worker 上进行分片和复制,而 coordinator 存储有关这些分片的元数据.向集群发出的所 ...
- Rust 中的数据布局-repr
repr(Rust) 首先,所有类型都有一个以字节为单位的对齐方式,一个类型的对齐方式指定了哪些地址可以用来存储该值.一个具有对齐方式n的值只能存储在n的倍数的地址上.所以对齐方式 2 意味着你必须存 ...
- ps基础总结
1.复制图层:首先选中移动工具(V),鼠标右键选中需要复制的图层(快捷方式:上面勾选自动选择),接着一只手按住Alt键,另一只手点击鼠标左键(不松开),往左往右移动即可.若是对多个图层起作用,就可将需 ...