OpenCV(三)之图像形态学处理

opencv基础篇 ——(六)图像形态学 图像形态学 阅读详情

Morphology系列

在这一节中,我分析了关于腐蚀、膨胀的API手册,再运用openCV内置的MorphologyEx实现形态学的开、闭运算、梯度运算和顶帽、黒帽操作。


Morphology-Erode(腐蚀)

function:
def erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None):
	使用特定的结构元素侵蚀图像。
	该函数使用指定的结构元素侵蚀源图像,该结构元素确定采用最小值的像素邻域的形状:

Erode

	该功能支持就地模式,侵蚀可以应用几次(迭代)次, 在多通道图像的情况下,每个通道被独立处理。
	
	参数
	SRC	输入图像; 通道数可以是任意的,但深度应该是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
	DST	输出与src相同大小和类型的图像。
	kernel	用于侵蚀的结构元素; if element=Mat(),将使用3 x 3矩形结构元素。可以使用getStructuringElement创建内核。
	anchor	锚点在元素内的位置; 默认值(-1,-1)表示锚点位于元素中心。
	iterations	腐蚀的次数。
	borderType	像素外推法,参见cv :: BorderTypes
	borderValue	边界不变的边界值,当使用常量进行边界填充的时候生效。

Eg.

#导入图像
kv = cv2.imread('kv.png')
plt.imshow(cv2.cvtColor(kv,cv2.COLOR_BGR2RGB))
plt.show()

Original

#创建一个kernel然后进行腐蚀,可以调整循环次数
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(kv,kernel,iterations=1)
#显示输出
plt.subplot(121)
plt.imshow(cv2.cvtColor(kv,cv2.COLOR_BGR2RGB))
plt.title("Original")
plt.subplot(122)
plt.imshow(erosion)
plt.title("erosion")
plt.show()

Result.1
Result

#创建erosion_2其中,腐蚀次数为2
erosion_2 = cv2.erode(kv,kernel,iterations=2)
plt.subplot(121)
plt.imshow(erosion)
plt.title("erosion")
plt.subplot(122)
plt.imshow(erosion_2)
plt.title("erosion_2")
plt.show()

Result.2
Result2

Note.

1.可以将周围噪声腐蚀掉,腐蚀次数过多,也会把有价值的图像腐蚀掉。


Morphology-Dilate(膨胀)

function:
def dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None): 
	通过使用特定的结构元素来扩展图像。
	该函数使用指定的结构元素扩展源图像,该结构元素确定采用最大值的像素邻域的形状:

Dilate

	该功能支持就地模式,扩张可以应用几次(迭代)次, 在多通道图像的情况下,每个通道被独立处理。
	
	参数
	SRC	输入图像; 通道数可以是任意的,但深度应该是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
	DST	输出与src相同大小和类型的图像。
	kernel	用于扩张的结构元素; if element=Mat(),将使用3 x 3矩形结构元素。可以使用getStructuringElement创建内核。
	anchor	锚点在元素内的位置; 默认值(-1,-1)表示锚点位于元素中心。
	iterations	应用扩张的次数。
	borderType	像素外推法,参见cv :: BorderTypes
	borderValue	边界不变的边界值,当使用常量进行边界填充的时候生效。

Eg.

#使用dilate函数把图像重新膨胀
kv_dilate = cv2.dilate(erosion,kernel,iterations=1)
plt.subplot(121)
plt.imshow(erosion)
plt.title("erosion")
plt.subplot(122)
plt.imshow(kv_dilate)
plt.title("kv_dilate")
plt.show()

Result.1
erosion-dilate

#输出源图与(先腐蚀-再膨胀)处理后的图像区别
plt.subplot(121)
plt.imshow(cv2.cvtColor(kv,cv2.COLOR_BGR2RGB))
plt.title("Original")
plt.subplot(122)
plt.imshow(kv_dilate)
plt.title("kv_dilate")
plt.show()

Result.2
origin-dilate

#尝试更多可能性,先膨胀,后腐蚀,图像会是怎么样呢?
#将源图膨胀
dilate = cv2.dilate(kv,kernel,iterations=1)
#将源图腐蚀
kv_erode = cv2.erode(dilate,kernel,iterations=1)
#输出,源图,膨胀一次,腐蚀一次的顺序图像
plt.subplot(131)
plt.imshow(kv)
plt.title("Original")
plt.subplot(132)
plt.imshow(dilate)
plt.title("dilate")
plt.subplot(133)
plt.imshow(kv_erode)
plt.title("kv_erode")
plt.show()

Result.3
original-dilate-erode

Note.

1.由此可以发现,当先腐蚀,后膨胀,可以达到消除其他干扰的效果(适当的迭代次数)。


Morphology-开运算与闭运算

function:
def morphologyEx(src, op, kernel, dst=None, anchor=None, 
	iterations=None, borderType=None, borderValue=None): 
	执行高级形态转换。
	函数morphologyEx可以使用侵蚀和膨胀作为基本操作来执行高级形态学变换。
	任何操作都可以就地完成,在多通道图像的情况下,每个通道被独立处理。
	
	参数
	SRC	来源图片。通道数可以是任意的。深度应为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
	DST	与源图像大小和类型相同的目标图像。
	OP	形态操作的类型,请参阅cv :: MorphTypes
	kernel	结构元素。它可以使用cv :: getStructuringElement创建。
	anchor	内核的锚定位置。负值意味着锚位于核心中心。
	iterations	侵蚀和扩张的次数。
	borderType	像素外推方法,请参阅cv :: BorderTypes
	borderValue	边界不变的边界值。默认值具有特殊含义。

MorphTypes

MorphTypes
Eg.

# 开运算:先腐蚀,后膨胀
opening = cv2.morphologyEx(kv,cv2.MORPH_OPEN,kernel)

Result.1
Original-opening

#闭运算:先膨胀,后腐蚀
# closing = cv2.morphologyEx(kv,cv2.MORPH_CLOSE,kernel)

Result.2
original-closing

Note.

1.@note迭代次数是应用侵蚀或扩张操作的次数。例如,具有两次迭代的打开操作(#MORPH_OPEN)相当于应用先后:侵蚀 - >侵蚀 - >扩张 - >扩张(而不是腐蚀 - >扩张 - >侵蚀 - >扩张)


Morphology-梯度运算

Eg.

#梯度运算(梯度=膨胀-腐蚀)
#膨胀
dilate = cv2.dilate(kv,kernel,iterations=1)
#腐蚀
erosion = cv2.erode(kv,kernel,iterations=1)
#相减
gradient1 = dilate-erosion
plt.subplot(121)
plt.imshow(gradient1)
plt.title("gradient1")

gradient2 = cv2.morphologyEx(kv,cv2.MORPH_GRADIENT,kernel)
plt.subplot(122)
plt.imshow(gradient2)
plt.title("gradient2")
plt.show()

Result.
gradient

Note.

1.梯度运算或许可以看做从膨胀到腐蚀要跨越的像素区


Morphology-TOPHAT&BLACKHAT

Eg.

#礼帽
tophat = cv2.morphologyEx(kv,cv2.MORPH_TOPHAT,kernel)
#黑帽
blackhat = cv2.morphologyEx(kv,cv2.MORPH_BLACKHAT,kernel)
#显示输出
plt.subplot(121)
plt.imshow(tophat)
plt.title("tophat")

plt.subplot(122)
plt.imshow(blackhat)
plt.title("blackhat")
plt.show()

Result.
tophat-blackhat
Note.

1.顶帽和黑帽的运算,或许是更多用于噪声的提取。


END

OpenCV分水岭算法图像分割优化:标记控制与形态学后处理完整指南 图像分割是计算机视觉中的基础问题,分水岭算法因其直观的拓扑原理被广泛应用于细胞计数、工业缺陷检测等场景。然而,直接调用cv2.watershed往往导致过分割,核心瓶颈在于标记图的质量而非算法本身。分水岭将图像视为地形图,通过梯度幅值构建山脊与山谷,种子区域决定分割边界,因此标记控制成为优化关键。形态学操作如开闭运算和距离变换可有效提取种子并修正边界。通过合理的预处理、核尺寸选择及markers矩阵约定,配合面积过滤与IoU验证,可显著提升分割精度。本文从原理到实战,结合完整代码和踩坑案例,提供一套可落地的 阅读详情

相关推荐

实战避坑:泛微E9流程接口与单点登录(SSO)开发全解析(含自定义Action、Restful API与免密登录)

本文深入解析泛微E9流程接口与单点登录(SSO)开发中的关键技术与避坑指南,涵盖自定义Action开发、Restful API鉴权机制及跨系统单点登录实现。通过实战案例与代码示例,帮助开发者高效完成二次开发,解决系统集成中的数据孤岛问题,提升企业信息化建设效率。

weixin_42549451的博客 676

morphologyEx(形态学操作)

morphologyEx(形态学操作) 概念 利用morphologyEx这个函数可以方便的对图像进行一系列的膨胀腐蚀组合。 函数讲解 ●函数原型 ○c++ void morphologyEx( InputArray src, OutputArray dst, int op, InputArray kernel, Point anchor = Point(-1,-1), int i

qq_38357239的博客 1154

CXL协议-第三章 CXL事务层

CXL.io为I/O设备提供了一个非一致的负载/存储接口。图3-1显示了Flex总线分层层次结构中的位置。事务类型、事务分组格式、基于信用的流量控制、虚拟通道管理和事务排序规则遵循PCIe*定义,详情请参考PCIe基础规范的“事务层规范”章节。本章重点介绍了用于CXL.io的著名的PCIe操作模式或特性。

qq_41305217的博客 2771

OpenCV基础: 常用的自定义函数

将项目实践中比较常用的自定义函数集合汇总, 主要是Python函数, 便于快速算法验证

水木年崋 1038

狗都能看懂的Proximal Policy Optimization(PPO)PPO算法详解

李宏毅老师的PPO算法讲解笔记

个人学习笔记 2万+

迪文DGUSII串口屏中文显示实战:手把手教你制作16x16点阵字库

本文提供了一份迪文DGUSII串口屏16x16点阵中文字库制作的完整实战指南。从显示原理、字体选择与参数设置,到使用FontLib Make工具生成字库文件,再到部署、调用及存储空间优化,手把手教你解决中文显示难题,确保界面文字既美观又稳定。

weixin_29190573的博客 157

OpenCV学习笔记

各个位平面与原图像的相关度呈现递增趋势,第0个位平面相关度最小,去掉的话人的肉眼也无法分辨,可以将这个平面用一串数字水印替代,达到防伪和版权声明的作用。因为8位图像最大能表示256个灰度级,因此使用8位图像表示HSV图像时需要将其映射到[0, 255]范围内,在opencv中采取除以2的策略表示。每一个像素都可以写为一个八位的二进制数,把每一位提取出来可以形成一个新的图像,根据提取的位次不同,所得到的图片与原图的相关度也不同。图像运算中通常会有三个参数:img_0, img_1, [, mask]

m0_47140196的博客 380

A Mathematical Framework for Transformer Circuits—(二)

transformer数学理论框架

qq_42208244的博客 758

opencv显示图像---固定格式(函数)

opencv显示图像,通过固定的函数进行设置显示。

weixin_52796022的博客 271

5分钟快速上手:用AI生成3D虚拟场景的保姆级教程

你是否想过:不用学复杂的3D建模软件,不用懂“多边形”“UV贴图”这些专业术语,也能快速生成一个梦幻的森林、未来感的城市,甚至外太空基地?本文的目的就是教完全没接触过3D技术的新手,用AI工具5分钟生成3D虚拟场景。我们会覆盖主流AI工具的选择、提示词编写技巧、生成后的简单调整,以及常见问题解决。本文会像“游戏任务指南”一样,从“认识工具”→“写提示词”→“生成场景”→“调整优化”逐步讲解,最后还会教你把生成的3D场景用起来!提示词:你给AI的“订单备注”,越详细效果越好。扩散模型。

AI 原生应用开发的博客 1969

AUTOSAR内存篇 -内存驱动(Mem)

Mem驱动程序的task是基于底层内存设备技术的物理分段的低级内存访问。Mem驱动程序的API与内存设备技术无关,因此向存储器访问模块上层提供了与存储器设备无关的接口。所有高级功能(如跨段操作)都由内存访问模块处理,以尽可能降低Mem驱动器的复杂性和占用空间。Mem驱动API命名、类型定义和文件命名规则都遵循标准的AUTUSAR BSW模块实现。服务Mem_Init初始化Mem驱动的内部状态,并设置Mem驱动Job处理状态到MEM_JOB_OK。

IOT2017的博客 715

python数字图像处理笔记17 形态学

膨胀 效果:扩大图像中的物体 定义:设 A 为原始二值图像,B 是结构元素,则 A 被 B 膨胀定义为: def Morphology_Dilate(img, Dil_time=1): H, W = img.shape # kernel MF = np.array(((0, 1, 0), (1, 0, 1), (0, 1, 0)), dtype=np.int) # each dilate ti

imxlw00的专栏 380

GEE:使用 CCDC 算法进行连续变化检测和分类

连续变化检测和分类(CCDC)算法是一种广泛应用于遥感数据分析的方法,可以用于检测土地覆盖变化、农作物生长状态的变化以及水资源的变化等。Google Earth Engine是一个强大的云端平台,提供了丰富的遥感数据和工具,可以用于执行各种类型的遥感数据分析。本文将介绍如何使用Google Earth Engine的CCDC算法进行连续变化检测和分类。

养乐多的博客 5682

OpenCV系列教程三:图像直方图及阈值处理、图像轮廓、形态学操作、车辆统计项目

  形态学()是指一系列用于处理图像形状和结构的算法,其基本思想是利用一种特殊的结构元(本质上就是卷积核)来测量或提取输入图像中相应的形状或特征。形态学操作通常用于预处理、图像分割、特征提取、图像滤波和图像增强等任务。形态学的基本操作包括:  阈值处理的主要意义是将图像中的某些区域分离出来,通常是为了突出前景(如物体)和背景(如场景)。通过二值化,可以将灰度图像转化为黑白图像(即二值图像),使后续的图像分析、边缘检测、目标识别等任务更加简便和高效。  例如,图像由暗色背景上的亮目标组成,这时可以通过设定适当

qq_56591814的博客 3321

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机视觉OpenCV(三):图像形态学处理

计算机视觉OpenCV:图像形态学处理,数学形态学是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换、灰值腐蚀和膨胀、灰值开闭运算、灰值形态学梯度等。......

Aiolei的博客 852

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OpenCV精进之路(三):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)

前言 腐蚀和膨胀是最基本的形态学运算。 腐蚀和膨胀是针对白色部分(高亮部分)而言的。 膨胀就是对图像高亮部分进行“领域扩张”,效果图拥有比原图更大的高亮区域;腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域。 一、膨胀 膨胀就是求局部最大值的操作,从图像直观看来,就是将图像光亮部分放大,黑暗部分缩小。 #include<opencv2\opencv.hpp> ...

YBAdiam的博客 990

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

基于python的opencv项目实战笔记(三)—— 图像形态学处理

import cv2 as cv import matplotlib.pyplot as plt import numpy as np def cv_show(name,img): cv.imshow(name,img) cv.waitKey(0) cv.destroyAllWindows() def cv_erode(img): kernel=np.ones((5,5),np.uint8) #iterations为迭代次数 erode1 = cv.erod.

m0_53257476的博客 494

《OpenCV3编程入门》学习笔记6 图像处理(三)形态学滤波(1):腐蚀与膨胀

第6章 图像处理 6.3 形态学滤波(1):腐蚀与膨胀 6.3.1 形态学概述 1.数学形态学(Mathematical morphology):建立在格论和拓扑学基础上的图像分析学科,是数学形态学图像处理的基本理论。 2.基本运算:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换、灰值腐蚀和膨胀、灰值开闭运算、灰值形态学梯度等 ...

ccchenxi的博客 822

Day 5:OpenCV图像处理基础(下)— 滤波、边缘检测、形态学操作

图像处理铁三角实战指南 本文介绍了传统CV中滤波降噪、边缘检测和形态学操作三大核心技术的组合应用。 关键内容: 滤波降噪:对比高斯/中值/双边滤波的适用场景,高斯滤波通用性最佳,中值滤波擅长处理椒盐噪声 边缘检测:详解Sobel/Laplacian/Canny原理,Canny通过双阈值和非极大值抑制获得最清晰边缘 形态学操作:开闭运算组合使用可消除噪点/连接断裂,梯度运算能提取物体轮廓 完整流程:演示了从降噪→边缘检测→形态学优化→轮廓提取的经典目标分割pipeline,包含参数调优技巧和效果对比。 适用场

2603_95724866的博客 298

OpenCV-图像形态学处理

OpenCV使用图像形态学操作,对图像进行处理

小白的学习笔记 1503

opencv图像处理技术(形态学操作)

结构元素是形态学操作的基本组成部分,它定义了形态学操作的形状和大小。通常是一个小的矩形、圆形或其他形状的核。在腐蚀和膨胀等操作中,结构元素在图像上滑动并与图像进行匹配,用来确定操作的范围。

m0_74859128的博客 3723

《OpenCv视觉之眼》Python图像处理九 :Opencv图像形态学处理之图像腐蚀与膨胀原理及方法

本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。同时,希望观看本专栏的小伙伴可以理解到OpenCv进行图像处理的强大哦,如有转载,请注明出处(原文链接和作者署名),感谢各位小伙伴啦! 前文参考: 《OpenCv视觉之眼》Python图像处理一 :Opencv-python的简介及Python环境搭建 《OpenCv视觉之眼》Python图像

qq_42451251的博客 5299

OpenCV图像处理之形态学处理

原理 形态学处理又称为形态学变换(Morphological Transformations),是图像处理中一种基于形状的简单变换。它的处理对象通常是二值化图像,也即只有黑白两种颜色。通常,形态学变换有两个输入:原二值图像,卷积核;一个输出:变换后的图像。 膨胀与腐蚀是最基本的两种形态学变换方法,而除此之外的形态学处理的常规操作(开运算、闭运算、梯度运算、礼帽运算以及黑帽运算等)则是这两种方法的组合。膨胀和腐蚀是针对较亮的像素的两种相反的操作,即较亮的像素范围会膨胀扩大和被暗色腐蚀变小。 腐蚀:卷积核的中心

流年亦梦啦啦啦 2548

opencv 形态学处理

一、话说形态学图像形态学中的几个基本操作:腐蚀、膨胀、开操作、闭操作。1.1 腐蚀结构A被结构B腐蚀的定义为, A⨀B={z|(B)z⊆A}A⨀B={z|(B)z⊆A}可以理解为,移动结构B,如果结构B与结构A的交集完全属于结构A的区域内,则保存该位置点,所有满足条件的点构成结构A被结构B腐蚀的结果。 1.2 膨胀结构A被结构B膨胀的定义为, A⨁B={z|(B^)z⋂A≠∅}A⨁B={z|(B^...

zhangjunp3的博客 1万+

(三)OpenCV——图像形态学

图像形态学处理是一种基于形状的图像分析技术,主要通过腐蚀、膨胀及其组合操作来增强或提取图像特征。核心操作包括腐蚀(缩小前景区域)、膨胀(扩大前景区域)以及开运算(先腐蚀后膨胀,去除小物体)和闭运算(先膨胀后腐蚀,填充孔洞)。高级操作如形态学梯度用于边缘检测,顶帽变换用于提取亮/暗细节。这些操作通过结构元素(如矩形、圆形)控制处理效果,广泛应用于噪声消除、特征提取和图像增强等领域。OpenCV提供了相关函数如erode()、dilate()和morphologyEx()等实现这些功能。

一位热爱编程的青年 1561

7:OpenCV—图像形态学处理

​ 用3×3的核去扫描二值图像,仅当核的与前景像素有**完全重合区域**时,将二值图像中对应的卷积核中心位置的像素保留,其余情况下,将中心位置的像素置0。拓展:卷积核可以**为任意形状(除1×1)**,且重置点可以选用卷积核中的**任意位置**,有‘**交集‘**就对重置点位置像素置1。包括图像的**腐蚀**、**膨胀**、**开**、**闭**、**形态学梯度、顶帽、黑帽、分支主题、结构元素**等操作。​ 拓展:卷积核可以**为任意形状**,且**重置点**可以选用卷积核中的**任意位置。

学习笔记 1501
上一篇: OpenCV(二)之阈值与平滑处理
下一篇: OpenCV(四)之图像梯度处理
DeepLearningJay
博客等级 码龄7年 3064粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值