本次实验的目标主要是为了掌握图像边缘检测和分割的意义和手段,掌握图像边缘检测和分割的方法及应用并通过实验讨论不同算子对边缘检测效果的影响。

本次实验主要完成了对图像进行Sobel算子边缘检测,对图像进行Prewitt算子边缘检测,对图像进行log算子边缘检测,对图像进行 Canny 算子边缘检测;以及对图像进行固定阈值(分别取了100和150两个阈值)分割,对图像进行迭代阈值分割。并对比分析了不同边缘检测算子的边缘检测效果,不同阈值分割方法的结果。(在考核思考题处还完成了实现Otsu的分割并进行了结果的对比)

代码如下:

from skimage import io,filters,img_as_ubyte, feature
import matplotlib.pyplot as plt
import cv2
import math
import numpy as np# 读取灰度图
img = io.imread('camera.png', as_gray=True)
#创建画布
plt.figure(num=1,figsize=(8, 4))
#显示原始图像
plt.subplot(2, 3, 1), plt.imshow(img,cmap='gray'),plt.title('original'), plt.axis('off')
# sobel 边缘检测
edges_sobel = filters.sobel(img)
#显示sobel检测后的图像
plt.subplot(2, 3, 2), plt.imshow(edges_sobel, cmap='gray'), plt.title('sobel'), plt.axis('off')# prewitt 边缘检测
edges_prewitt = filters.prewitt(img)
#显示prewitt检测后的图像
plt.subplot(2, 3, 3), plt.imshow(edges_prewitt, cmap='gray'), plt.title('prewitt'), plt.axis('off')# log 边缘检测
# 先通过高斯滤波降噪
gaussian = cv2.GaussianBlur(img, (3, 3), 0)
# 再通过拉普拉斯算子做边缘检测
dst = cv2.Laplacian(gaussian, cv2.CV_16S, ksize=3)
LOG = cv2.convertScaleAbs(dst)
#显示log检测后的图像
plt.subplot(2, 3, 4), plt.imshow(LOG, cmap='gray'), plt.title('log'), plt.axis('off')# canny 边缘检测
edges_canny = feature.canny(img, sigma=1.0)
#显示canny检测后的图像
plt.subplot(2, 3, 5), plt.imshow(edges_canny, cmap='gray'), plt.title('canny'), plt.axis('off')
plt.show()img1 = cv2.imread('camera.png', cv2.IMREAD_GRAYSCALE)
# 固定阈值分割 T=100
_, out1 = cv2.threshold(img1, 100, 255, cv2.THRESH_BINARY)
# 固定阈值分割 T=150
_, out2 = cv2.threshold(img1, 150, 255, cv2.THRESH_BINARY)
# 迭代阈值分割
T = img1.mean()
done=False
while not done:t0 = img1[img1 < T].mean()t1 = img1[img1 >= T].mean()t = (t0 + t1) / 2done = abs(T - t) < 1T = t_, img_iter = cv2.threshold(img1, T, 255, cv2.THRESH_BINARY)#otsu大津法进行图像分割
# 方法选择为THRESH_OTSU
ret1, th1 = cv2.threshold(img1, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
print(f"大津法下作用的阈值为{ret1}")
#创建画布
plt.figure(num=2,figsize=(8, 4))
#分别显示原图像,固定阈值分割后的图像,迭代阈值分割后的图像
plt.subplot(1,5,1), plt.imshow(img1,cmap='gray'), plt.title('original'), plt.axis('off')
plt.subplot(1,5,2), plt.imshow(out1,cmap='gray'), plt.title('fixed100'), plt.axis('off')
plt.subplot(1,5,3), plt.imshow(out2,cmap='gray'), plt.title('fixed150'), plt.axis('off')
plt.subplot(1,5,4), plt.imshow(img_iter,cmap='gray'), plt.title('iter'), plt.axis('off')
plt.subplot(1,5,5), plt.imshow(th1,cmap='gray'), plt.title('otsu'), plt.axis('off')plt.show()

实验分析与日志

  1. 本实验进行边缘检测,用到了skimage包,故需提前下载并配置好该包。
  2. 通过边缘检测实验,我更加深入地理解了一阶微分算子、二阶微分算子以及在进行检测前平滑与否对检测结果的影响。Sobel算子和Prewitt算子都是一阶微分算子,其在对比度大的点产生较高的响应,故其产生的边缘较粗;而Log算子是用到了拉普拉斯算子这一二阶微分算子,其在对比度大的点产生零交叉,故其能产生更细的边缘,同时其在锐化前先使用了高斯滤波器进行平滑去噪,减轻了噪声对拉普拉斯算子的影响。而canny算子进一步优化,采用了非最大抑制的方法,效果更佳。
  3. 通过对比不同阈值分割法我也更加深入理解了其效果及使用场景的不同。

数字图像处理课程实习——边缘检测与图像分割相关推荐

  1. 数字图像处理课程实习——图像的线性变换与直方图变换

    本人为测绘相关专业,此文为学习课程数字图像处理所写的实习作业部分内容.想着写了也就写了,不如发出来记录以下,说不定自己以后会用到的时候能来看看.当然大家能够从中学到或借鉴到什么就更好啦. 本次实验的目 ...

  2. 数字图像处理课程实习——傅里叶变换与频域滤波

    本次实验的目标主要是为了为了学会使用傅里叶变换将图像由空间域变到频率域,并设计和使用理想低通滤波器.理想高通滤波器和巴特沃斯低通滤波器来对图像在频域范围进行处理,而后进行逆傅里叶变换,最终得到空间域里 ...

  3. 数字图像处理课程 复习重点

    前言: 本博客为中科院人工智能专业数字图像处理课程整理的复习重点(杨戈老师和彭思龙老师) 划重点: 一共8个大题 图像获取与生成部分: 图像获取过程.采样定理(重点) 图像为什么可以离散化 图像为什么 ...

  4. (附源码)python数字图像处理课程平台 毕业设计 242339

    Python数字图像处理课程平台的开发 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人 ...

  5. (附源码)Python数字图像处理课程平台 毕业设计242339

    Python数字图像处理课程平台的开发 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人 ...

  6. matlab数字图像处理课程设计报告,数字图像处理课程设计实验报告.doc

    数字图像处理课程设计实验报告 数字图像处理课程设计 题 目:数字图像处理及Huufman(或小波变换)编码仿真实现 学生姓名: 学 院:信息工程学院 系 别:电子信息工程系 专 业:电子信息工程 班 ...

  7. matlab moveverage,MATLAB在数字图像处理课程教学中的应用

    ISSN1672-4305 CN12-1352/N 实 验 室 科 学 LABORATORY SC I ENCE 第14卷 第1期 2011年2月 Vol 14 N o 1 Feb 2011 MATL ...

  8. 数字图像处理课程(作业+实验+大作业)相关文章 传送门

    数字图像处理课程(作业+实验+大作业)相关文章 传送门 博文说明 本文所使用代码或多或少参考了以往博文的同类or相似文章的代码,并非纯原创 本文仅用于记录并提供一种代码思路,供大家参考 文章目录 数字 ...

  9. matlab课程数字图像处理设计题目,数字图像处理课程设计题目和要求_2013

    数字图像处理课程设计内容.要求 题目一:图像处理软件 1.设计内容及要求: (1).独立设计方案,实现对图像的十五种以上处理(比如:底片化效果.灰度增强.图像复原.浮雕效果.木刻效果等等). (2). ...

最新文章

  1. bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治
  2. python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解
  3. markdown测试
  4. python中的捕获异常、异常跟踪
  5. 前端页面:一直报Cannot set property 'height' of undefined
  6. WSGI服务器实践二--实践一个基本功能的WSGI服务器
  7. oracle的数据泵导入,导出以及创建用户及删除当前连接用户
  8. 2021-09-07python深拷贝和浅拷贝
  9. 利用Python绘制图案——七色花子
  10. 春节要闻回顾 | 数字人民币和元宇宙被搬上春晚;美国财政部报告警告NFT可用于洗钱...
  11. 基于opencv的手指静脉识别(附源码)
  12. xp计算机找不到音量调节,winxp系统电脑音量无法调节不能调节声音的恢复方案...
  13. 2018年上半年阅读总结(系统架构师)
  14. echarts 随时间推移得刻度线_抖音超火❤罗盘时钟(免费附源码)
  15. Anaconda conda常用命令:从入门到精通
  16. html div缩放
  17. wps里面函数怎么使用_WPS中函数的使用方法 - 卡饭网
  18. JavaScript(JS)有一组英文歌曲,按照歌曲名称的字母顺序从“A”到“Z”顺序排列,保存在一个数组中。
  19. 刘晓燕《不就是语法和长难句吗》第一章个人笔记
  20. 数据库表可以没有主键吗?

热门文章

  1. php vhost配置,lnmp环境vhost配置
  2. 企业网站为什么要做SEO,它的重要性有哪些
  3. 【腾讯云 Finops Crane 集训营】 如何在Windows上快速搭建一个Kubernetes+Crane 环境及应用
  4. fm2018 ajax,fm2018各位置球员排行 各位置神级球员能力值排名
  5. CVPR2021 | 五官复原效果惊艳,腾讯ARC利用GAN人脸先验来解决
  6. matlab 猜数游戏首先由计算机随机,matlab的猜数游戏
  7. 用企业版证书,发布in house app
  8. 字符串/链接在线转二维码
  9. C 语言函数作业,c语言函数练习题附答案
  10. 网易云音乐数仓治理之数据任务重构实践