python均值滤波_均值滤波、高斯滤波python实现
首先编写卷积代码
保证可以实现各种size滤波
def image_convolution(image,kernel):
[img_height,img_width] = image.shape
[kernel_height,kernel_width] = kernel.shape
expand_width = int((kernel_width - 1)/2)
expand_height = int((kernel_height - 1)/2)
con_height = int(img_height + expand_height*2)
con_width = int(img_width + expand_width*2)
#给结果图像、用于卷积处理的矩阵创建空间
result_image = np.zeros(image.shape)
con_image = np.zeros((con_height, con_width))
#填入图片
con_image[expand_height:expand_height+img_height, expand_width:expand_width+img_width]=image[ : , :]
#对每个像素点进行处理
for i in range(expand_height,expand_height+img_height):
for j in range(expand_width,expand_width+img_width):
result_image[i-expand_height][j-expand_width] = int(np.sum(con_image[i-expand_height:i+expand_height+1, j-expand_width:j+expand_width+1]*kernel))
print(result_image)
return result_image
均值滤波
设计kernel很简单,初始化为1后遍历除以size平方即可
def mean_mask(size):
mask=np.ones((size, size))
return mask/size/size
高斯滤波
def gauss_mask(sigma):
mask_height = mask_width = sigma*2+1
mask = np.zeros((mask_height, mask_width))
sum = 0
for i in range(-sigma,sigma+1):
for j in range(-sigma,sigma+1):
mask[i+sigma][j+sigma] = np.exp(-0.5 * (i ** 2 + j ** 2) / sigma ** 2)
sum += mask[i+sigma][j+sigma]
return mask/sum
代码总和
import cv2 as cv2
import matplotlib.pyplot as plt
import numpy as np
def image_convolution(image,kernel):
[img_height,img_width] = image.shape
[kernel_height,kernel_width] = kernel.shape
expand_width = int((kernel_width - 1)/2)
expand_height = int((kernel_height - 1)/2)
con_height = int(img_height + expand_height*2)
con_width = int(img_width + expand_width*2)
#给结果图像、用于卷积处理的矩阵创建空间
result_image = np.zeros(image.shape)
con_image = np.zeros((con_height, con_width))
#填入图片
con_image[expand_height:expand_height+img_height, expand_width:expand_width+img_width]=image[ : , :]
#对每个像素点进行处理
for i in range(expand_height,expand_height+img_height):
for j in range(expand_width,expand_width+img_width):
result_image[i-expand_height][j-expand_width] = int(np.sum(con_image[i-expand_height:i+expand_height+1, j-expand_width:j+expand_width+1]*kernel))
print(result_image)
return result_image
def gauss_mask(sigma):
mask_height = mask_width = sigma*2+1
mask = np.zeros((mask_height, mask_width))
sum = 0
for i in range(-sigma,sigma+1):
for j in range(-sigma,sigma+1):
mask[i+sigma][j+sigma] = np.exp(-0.5 * (i ** 2 + j ** 2) / sigma ** 2)
sum += mask[i+sigma][j+sigma]
return mask/sum
def mean_mask(size):
mask=np.ones((size, size))
return mask/size/size
if __name__ == "__main__":
image = cv2.imread("dongcha.jpg", 0)
image = cv2.resize(image,(512,512))
kernel = mean_mask(5)
result = np.zeros(image.shape)
result = image_convolution(image = image,kernel = kernel)
print(result)
result=result.astype(np.uint8)
cv2.imshow("result", result)
cv2.imshow("orignal", image)
# mask =gauss_mask(1)
print(kernel)
# print(mask/sum(mask))
cv2.waitKey(0)
效果如下
python均值滤波_均值滤波、高斯滤波python实现相关推荐
- python opencv高斯滤波_【OpenCV】基于Python的图像高斯平滑和椒盐噪声处理 | 学步园...
最近要做一个Project,是使用TV来对添加了Gaussian和Salt&Pepper噪声的图像进行恢复,前期的任务是生成噪声污染的图像. 噪声图像的生成采用对图像进行高斯平滑,之后在随机的 ...
- 带噪图像的高斯滤波MATLAB,图像处理___高斯滤波与高斯噪声
噪声 1.噪声表现形式 噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块.一般,噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息.通俗的说就是噪声让图像不清楚. 2 ...
- OpenCV图像学习八,图像归一化盒子滤波处理和图像高斯滤波处理实现
OpenCV图像模糊原理 模糊操作是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时减低椒盐噪声. 图像模糊,也称为平滑操作,是一种简单且经常使用的图像处理操作 ...
- opencv 高通滤波和低通滤波_一阶低通滤波原理详解
在汽车标定中,使用最多的滤波算法即低通滤波,很多朋友可能知道怎么标定,但是不清楚具体的原理,因此本文将介绍一阶低通滤波的原理.算法建模仿真和优缺点: 一阶滤波算法的原理 一阶滤波,又叫一阶惯性滤波,或 ...
- python 两点曲线_十行代码,用Python做一个迷你版的美图秀秀
美图秀秀相信大家都不陌生,大家只要操作美图秀秀,就可以P掉图片中脸上的一些瑕疵,让人变得更加的美丽.今天小编就带领大家来借助Python和Flask来实现一个美图秀秀的网页设计,大家只需要通过网页上传 ...
- 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...
话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...
- python做运动控制_第一课:用Python操控小龟小车运动
欢迎来到小龟的课堂,今天我们讲如何用小龟小车的车载Python控制小车运动. 如果小伙伴还不会使用小龟小车的Python编辑器的话,可以阅读这篇教程<如何使用小龟小车的Python编辑器> ...
- print python excel分隔_合并/拆分 Excel?Python、VBA轻松自动化
作者 | Ryoko 来源 | 凹凸数据 当你收集了 n 个人的 EXCEL 记录表,需要将它们汇成一个总表时你会怎么做呢? 如果不通过技术手段,要一个个打开再复制粘贴也太麻烦了吧! 此时就需要一个通 ...
- python半圆代码_趣味项目:用Python代码做个月饼送给你!
所用工具 1.Python中的turtle包 2.对Python似火的热情 先来介绍一番 Turtle作图又叫海龟作图,是Python中比较有趣的一个模块,功能强大,使用方便.简单来说,比如有一块空地 ...
最新文章
- 写一个能自动生成四则运算题目的软件,要求除了整数,还要支持正分数的四则运算。和同学们比较各自的程序功能、实现方法的异同。...
- springboot 的启动流程
- jquery lazy load
- 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
- MFC中如何在CMainFrame类中访问CxxxView视图类中的成员
- 字符串常量池、堆、栈
- 线性反馈移位寄存器(LFSR,Linear Feedback Shift Register)
- 虚拟化工具介绍 (资源)
- python如何登录并爬取获得百度指数统计图数据
- 台式计算机识别不了鼠标,USB无线鼠标失灵电脑检测不到无法识别怎么办
- MITRE ATTCK超详细学习笔记-01(背景,术语,案例)
- nacos修改用户名密码
- Matlab多if语句(if,elseif,else)分段执行时遇到被上一个条件覆盖的问题及解决
- Dbeaver基本使用
- 使用xmind绘制思维导向
- 基于 LSTM-Attention 的中文新闻文本分类
- jQuery_01选择器
- 文件转base64输出
- 浅谈在实验室的一个作品---8x8x8光立方
- .Net报表工具ActiveReports在线设计器教程 - 如何调用自定义字体
热门文章
- 1680 Catalan数
- offsetWidth与scrollLeft
- VMP分析之VMP2.13流程分析(三)
- Could not bind with 192.168.56.1: [WinError 10049] 在其上下文中,该请求的地址无效。 (please check your host binding
- 【Lilishop商城】记录一下B2B2C商城系统学习笔记~
- (Java实现) 删数问题
- 报表服务器项目交叉表,交叉表
- 平安养老险党委书记、董事长甘为民:做实、做多、做大养老三支柱
- ROS中的多坐标变换详解(示例+代码)
- java_day10作业