广州大学计算机视觉实验三:图像滤波

2023-11-02 12:10

本文主要是介绍广州大学计算机视觉实验三:图像滤波,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相关资料

广州大学计算机视觉实验一:图像处理入门
广州大学计算机视觉实验二:摄像机几何
广州大学计算机视觉实验三:图像滤波
广州大学计算机视觉实验四:图像分割
广州大学计算机视觉实验五:简易数字识别
广州大学计算机视觉实验六:车牌识别
六份实验报告下载链接Click me🔗

实验三 图像滤波

  • 相关资料
  • 一、实验目的
  • 二、基本要求
  • 三、实验软件
  • 四、实验内容
  • 五、实验过程
    • 1、导入库
    • 2、选择经典的宇航员图片
    • 3、添加椒盐噪声
    • 4、对图像进行方框滤波Box Filter
    • 5、对图像进行高斯滤波Gaussian Filter
    • 6、对图像进行中值滤波
    • 7、通过图像梯度提取图像边缘
    • 8、对图像进行锐化

一、实验目的

本实验课程是计算机、智能、物联网等专业学生的一门专业课程,通过实验,帮助学生更好地掌握计算机视觉相关概念、技术、原理、应用等;通过实验提高学生编写实验报告、总结实验结果的能力;使学生对计算机视觉、模式识别实现等有比较深入的认识。
1.掌握模式识别中涉及的相关概念、算法。
2.熟悉计算机视觉中的具体编程方法;
3.掌握问题表示、求解及编程实现。

二、基本要求

1.实验前,复习《计算机视觉与模式识别》课程中的有关内容。
2.准备好实验数据。
3.编程要独立完成,程序应加适当的注释。
4.完成实验报告。

三、实验软件

使用Python实现。

四、实验内容

选择任意图片,随机加入椒盐噪声(随机改写像素值为0/255),分别进行:

  1. 对图像进行方框滤波Box Filter
  2. 对图像进行高斯滤波Gaussian Filter
  3. 对图像进行中值滤波
  4. 对图像进行锐化
  5. 通过图像梯度提取图像边缘

五、实验过程

1、导入库

from skimage import data, img_as_float
from skimage import io, color
import matplotlib.pyplot as plt
import random
import numpy as np
import cv2

2、选择经典的宇航员图片

#原始图片
astro = img_as_float(data.astronaut())
img = astro
io.imsave('./astro.png', img)
plt.imshow(img)

在这里插入图片描述

3、添加椒盐噪声

def sp_noise(image, prob):'''添加椒盐噪声image:原始图片prob:噪声比例'''output = np.zeros(image.shape, np.float)thres = 1 - probfor i in range(image.shape[0]):for j in range(image.shape[1]):rdn = random.random()  # 随机生成0-1之间的数字if rdn < prob - 0.001:  # 如果生成的随机数小于噪声比例则将该像素点添加黑点,即椒噪声output[i, j, :] = 0elif rdn > thres + 0.001:  # 如果生成的随机数大于(1-噪声比例)则将该像素点添加白点,即盐噪声output[i, j, :] = 1else:output[i, j, :] = image[i, j, :]return outputnoisy = sp_noise(img,0.05)#椒盐噪声
plt.imshow(noisy)
io.imsave('./noisy.png', noisy)

4、对图像进行方框滤波Box Filter

#读取图片
noisy = cv2.imread('./noisy.png')
source = cv2.cvtColor(noisy,cv2.COLOR_BGR2RGB)# 均值滤波
result = cv2.blur(source, (5, 5))# 显示图形titles = ['Source Image', 'Blur Image']
images = [source, result]
for i in range(2):plt.subplot(1, 2, i + 1), plt.imshow(images[i])plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

5、对图像进行高斯滤波Gaussian Filter

# 高斯滤波
result = cv2.GaussianBlur(source, (3, 3), 0)# 显示图形
titles = ['Source Image', 'GaussianBlur Image']
images = [source, result]
for i in range(2):plt.subplot(1, 2, i + 1), plt.imshow(images[i])plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

6、对图像进行中值滤波

# 中值滤波
result = cv2.medianBlur(source, 3)# 显示图形
titles = ['Source Image', 'medianBlur Image']
images = [source, result]
for i in range(2):plt.subplot(1, 2, i + 1), plt.imshow(images[i])plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

7、通过图像梯度提取图像边缘

采用了三种经典算子prewitt、sobel、roberts,还采用了拉普拉斯的变换拓展模版

import cv2
import numpy as np
#加载图像
#读取图片
image = cv2.imread('./astro.png')
source = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
plt.imshow(source) #自定义卷积核:prewitt算子
kernel_sharpen_1 = np.array([[-1,0,+1],[-1,0,+1],[-1,0,+1]])kernel_sharpen_2 = np.array([[-1,-1,-1],[0,0,0],[+1,+1,+1]])#相关
output_1 = cv2.filter2D(source,-1,kernel_sharpen_1)
output_2 = cv2.filter2D(source,-1,kernel_sharpen_2)
#显示图形
titles = ['Source Image', 'prewitt1 Image', 'prewitt2 Image']  
images = [source, output_1,output_2]  
for i in range(3):  plt.subplot(1,3,i+1), plt.imshow(images[i])  plt.title(titles[i])  plt.xticks([]),plt.yticks([])  
plt.show()

在这里插入图片描述

#自定义卷积核:sobel算子
kernel_sharpen_1 = np.array([[-1,0,+1],[-2,0,+2],[-1,0,+1]])kernel_sharpen_2 = np.array([[-1,-2,-1],[0,0,0],[+1,+2,+1]])#相关
output_1 = cv2.filter2D(source,-1,kernel_sharpen_1)
output_2 = cv2.filter2D(source,-1,kernel_sharpen_2)
#显示图形
titles = ['Source Image', 'sobel1 Image', 'sobel2 Image']  
images = [source, output_1,output_2]  
for i in range(3):  plt.subplot(1,3,i+1), plt.imshow(images[i])  plt.title(titles[i])  plt.xticks([]),plt.yticks([])  
plt.show()

在这里插入图片描述

#自定义卷积核:roberts算子

kernel_sharpen_1 = np.array([[0,-1],[+1,0]])kernel_sharpen_2 = np.array([[+1,0],[0,-1]])#相关
output_1 = cv2.filter2D(source,-1,kernel_sharpen_1)
output_2 = cv2.filter2D(source,-1,kernel_sharpen_2)
#显示图形
titles = ['Source Image', 'roberts1 Image', 'roberts2 Image']  
images = [source, output_1,output_2]  
for i in range(3):  plt.subplot(1,3,i+1), plt.imshow(images[i])  plt.title(titles[i])  plt.xticks([]),plt.yticks([])  
plt.show()

在这里插入图片描述

#拉普拉斯的变换拓展模版
kernel_sharpen_1 = np.array([[1,1,1],[1,-8,1],[1,1,1]])#卷积
output_1 = cv2.filter2D(source,-1,kernel_sharpen_1)
#显示图形
titles = ['Source Image', 'Laplacian Image']  
images = [source, output_1]  
for i in range(2):  plt.subplot(1,2,i+1), plt.imshow(images[i])  plt.title(titles[i])  plt.xticks([]),plt.yticks([])  
plt.show()

在这里插入图片描述
在这里插入图片描述

8、对图像进行锐化

上面提取边缘的操作都可以改进成锐化操作,因此上面的算子都有对应的锐化操作,这里仅采用拉普拉斯的拓展模版举例。
原图像-拉普拉斯的拓展模版图像=锐化图像

kernel_sharpen_1 = np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]])#卷积
output_1 = cv2.filter2D(source,-1,kernel_sharpen_1)
#显示图形
titles = ['Source Image', 'Sharpen Image']  
images = [source, output_1]  
for i in range(2):  plt.subplot(1,2,i+1), plt.imshow(images[i])  plt.title(titles[i])  plt.xticks([]),plt.yticks([])  
plt.show()

在这里插入图片描述

这篇关于广州大学计算机视觉实验三:图像滤波的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/330500

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

Open3D 基于法线的双边滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 输入参数: 输出参数: 参数影响: 2.2完整代码 三、实现效果 3.1原始点云 3.2滤波后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述         基于法线的双边

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

6.4双边滤波

目录 实验原理 示例代码1 运行结果1 实验代码2 运行结果2 实验原理 双边滤波(Bilateral Filtering)是一种非线性滤波技术,用于图像处理中去除噪声,同时保留边缘和细节。这种滤波器结合了空间邻近性和像素值相似性的双重加权,从而能够在去噪(平滑图像)的同时保留图像的边缘细节。双边滤波器能够在的同时,保持边缘清晰,因此非常适合用于去除噪声和保持图像特征。在Op

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通