29-分水岭算法与图像修补(EmguCV学习)

Emgucv不完整图像分割试验(十九)——Emgucv实现ACE算法 图像相关的ACE算法有自适应色彩和自适应对比度增强两种缩写的意思,本文是针对对比度自适应增强的。网上代码很多的,但都是基于Opencv实现的, 相关介绍可以直接看:https://blog.youkuaiyun.com/thecentry/article/details/105716770 以上肯定不是原作者,我记得很久前看到一位很厉害的大神用c++写的,最后封装成32位C#能用的DLL的,他应该才是原作者,有谁找到了私信我,我替换成原作者的。 opencv转emgucv大家肯定没问题,就是有些小细节没注意到会造 阅读详情

OpenCV3编程入门提炼

1、在许多实际应用中,我们需要分割图像,但无法从背景图像中获得有用信息,分水岭算法(watershed)可以将图像中的边缘转换成山脉,将均匀区域转换为山谷,这样有助于分割目标;分水岭算法是基于拓扑理论的数学形态学的分割方法:图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,集水盆的边界形成分水岭;
2、分水岭的计算过程是一个迭代标注过程,L.Vincent提出的算法中:分水岭算法分为2个步骤:①排序过程;②淹没过程;分水岭表示的是输入图像的极大值点;
3、分水岭算法API : watershed(): 参数image:输入的图像(必须是彩色3通道图像);参数markers : 既是输入参数,也是输出参数,必须先定义一个大概的范围掩膜作为输入,类型为CV32S;
在这里插入图片描述

Google Translator:

在这里插入图片描述
4、图像修补:利用已经被破坏区域的边缘,即边缘的颜色与结构,繁殖和混合到图像中,以达到图像修补的目的;如果被破坏区域不是太大,并且在被破坏的区域边缘包含足够多的纹理和颜色,则图像修补可以较好的恢复图像,图像损坏区域过大,则无法修补; API : Inpaint();
在这里插入图片描述
在这里插入图片描述

LearningOpenCV3 提炼

1、分水岭算法将一幅图像中的线转换为“山”,平坦区域转换成“谷”,以有助于辅助物体分割;分水岭算法首先计算图像的梯度,这有助于在原图中形成没有纹理的谷或盆地(较低点),同时形成线条丰富的山脉或ranges(边缘高脊),然后从指定的点向盆地灌水,当图像被填满时,所有标记区域被分割开;
2、分水岭算法允许使用者标记已知是对象或背景一部分的对象或背景部分:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、watershed()函数在使用前应该给marker寻找一些已知的标记值;参考:https://blog.youkuaiyun.com/jumencibaliang92/article/details/81514766
在这里插入图片描述

Code

convertTo():
在这里插入图片描述

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Emgu.CV;
using Emgu.Util;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using Emgu.CV.Util;
using System.Drawing;


namespace lesson29
{
    class Program
    {
        static void Main(string[] args)
        {
            //Mat src = CvInvoke.Imread("bird.jpg");
            //CvInvoke.Imshow("input", src);
            //Mat dst = src.Clone();

            //Mat mask = new Mat(src.Size, DepthType.Cv8U, 1);
            //mask.SetTo(new MCvScalar(0));
            ////标记背景图像 (颜色填充255)
            //CvInvoke.Rectangle(mask, new Rectangle(0, 0, src.Width - 2, src.Cols - 2), new MCvScalar(255), 0);
            ////标记鸟(颜色填充128)
            //CvInvoke.Rectangle(mask, new Rectangle(253, 149, 80, 69), new MCvScalar(128), 1);
            ////标记岩石(颜色填充64)
            //CvInvoke.Rectangle(mask, new Rectangle(276, 360, 37, 27), new MCvScalar(64), 1);
            //CvInvoke.Imshow("mask", mask);

            //mask.ConvertTo(mask, DepthType.Cv32S);  //CV8U  --> CV32S
            //CvInvoke.Watershed(src, mask);          //分水岭算法计算
            //mask.ConvertTo(mask, DepthType.Cv8U);
            //CvInvoke.Imshow("marker", mask);

            //Mat mask_inv = new Mat();
            //CvInvoke.BitwiseNot(mask, mask_inv);
            //Mat marker1 = new Mat();
            //Mat marker2 = new Mat();
            //Mat marker3 = new Mat();

            ////提取出掩膜中对应分量
            //CvInvoke.Threshold(mask, marker1, 64, 255, ThresholdType.ToZeroInv);
            //CvInvoke.Threshold(mask_inv, marker2, 127, 255, ThresholdType.ToZeroInv);
            //CvInvoke.Threshold(mask, marker3, 128, 255, ThresholdType.Binary);

            //CvInvoke.Imshow("marker1", marker1);
            //CvInvoke.Imshow("marker2", marker2);
            //CvInvoke.Imshow("marker3", marker3);

            //VectorOfVectorOfPoint contours1 = new VectorOfVectorOfPoint();
            //CvInvoke.FindContours(marker1, contours1, null, RetrType.Tree, ChainApproxMethod.ChainApproxNone);
            //CvInvoke.DrawContours(dst, contours1, -1, new MCvScalar(0, 0, 255), -1);

            //VectorOfVectorOfPoint contours2 = new VectorOfVectorOfPoint();
            //CvInvoke.FindContours(marker2, contours2, null, RetrType.Tree, ChainApproxMethod.ChainApproxNone);
            //CvInvoke.DrawContours(dst, contours2, -1, new MCvScalar(0, 255, 0), -1);

            //VectorOfVectorOfPoint contours3 = new VectorOfVectorOfPoint();
            //CvInvoke.FindContours(marker3, contours3, null, RetrType.Tree, ChainApproxMethod.ChainApproxNone);
            //CvInvoke.DrawContours(dst, contours3, -1, new MCvScalar(255, 0, 255), -1);

            //CvInvoke.AddWeighted(src, 0.5, dst, 0.5, 0, dst);

            //CvInvoke.Imshow("result", dst);
            //CvInvoke.WaitKey(0);

            //分水岭算法实例2
            //Mat srcImg = CvInvoke.Imread("cow.jpg");
            //CvInvoke.Imshow("input", srcImg);
            //Mat dst = srcImg.Clone();

            //Mat grayImg = new Mat();
            //CvInvoke.CvtColor(srcImg, grayImg, ColorConversion.Bgr2Gray);
            ////图片是彩色图片,阈值不好直接确定,使用OTSU算法直接计算
            //CvInvoke.Threshold(grayImg, grayImg, 0, 255, ThresholdType.Otsu | ThresholdType.BinaryInv);
            //CvInvoke.Imshow("threshold", grayImg);
            //CvInvoke.MedianBlur(grayImg, grayImg, 5);

            ////前景色与背景色填充不同的灰度值
            //Mat element = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(7, 7), new Point(-1, -1));
            //Mat fgImg = new Mat();
            //CvInvoke.Erode(grayImg, fgImg, element, new Point(-1, -1), 1, BorderType.Default, new MCvScalar());
            //CvInvoke.Imshow("foreground", fgImg);
            //Mat bgImg = new Mat();
            //CvInvoke.Dilate(grayImg, bgImg, element, new Point(-1, -1), 1, BorderType.Default, new MCvScalar());
            //CvInvoke.Imshow("background", bgImg);
            //CvInvoke.Threshold(bgImg, bgImg, 1, 128, ThresholdType.BinaryInv);
            //CvInvoke.Imshow("background1", bgImg);
            ////创建mark标记
            //Mat mask = new Mat();
            //CvInvoke.Add(fgImg, bgImg, mask);
            //mask.ConvertTo(mask, DepthType.Cv32S);
            //CvInvoke.Watershed(srcImg, mask);

            //mask.ConvertTo(mask, DepthType.Cv8U);
            //CvInvoke.Imshow("masker", mask);

            //Mat marker1 = new Mat();
            //Mat marker2 = new Mat();
            //Mat marker3 = new Mat();

            ////分离各背景
            //CvInvoke.Threshold(mask, marker1, 128, 255, ThresholdType.ToZeroInv);
            //CvInvoke.Threshold(mask, marker2, 129, 255, ThresholdType.Binary);

            //CvInvoke.Imshow("marker1", marker1);
            //CvInvoke.Imshow("marker2", marker2);

            //VectorOfVectorOfPoint contours1 = new VectorOfVectorOfPoint();
            //VectorOfRect hierarchy1 = new VectorOfRect();
            //CvInvoke.FindContours(marker1, contours1, hierarchy1, RetrType.Tree, ChainApproxMethod.ChainApproxNone);
            //CvInvoke.DrawContours(dst, contours1, -1, new MCvScalar(0, 255, 0), -1);

            //VectorOfVectorOfPoint contours2 = new VectorOfVectorOfPoint();
            //VectorOfRect hierarchy2 = new VectorOfRect();
            //CvInvoke.FindContours(marker2, contours2, hierarchy2, RetrType.Tree, ChainApproxMethod.ChainApproxNone);
            //CvInvoke.DrawContours(dst, contours2, -1, new MCvScalar(0, 0, 255), -1);

            //CvInvoke.AddWeighted(srcImg, 0.7, dst, 0.3, 0, dst);

            //CvInvoke.Imshow("result", dst);
            //CvInvoke.WaitKey(0);

            //图像修补实例1
            //Mat src = CvInvoke.Imread("snow.jpg");
            //Mat dst = new Mat();
            //Mat mask = new Mat(src.Size, DepthType.Cv8U, 1);  //存储修补掩膜
            //mask.SetTo(new MCvScalar(0));
            //CvInvoke.Imshow("input", src);

            //CvInvoke.Rectangle(mask, new Rectangle(46, 274, 97, 109), new MCvScalar(255), -1);//脚印修补区域
            //CvInvoke.Rectangle(mask, new Rectangle(188, 322, 476, 383), new MCvScalar(255), -1);//文字修补区域

            //CvInvoke.Inpaint(src, mask, dst, 3, InpaintType.NS);
            //CvInvoke.Imshow("result", dst);

            //CvInvoke.WaitKey(0);

            //图像修补实例2  人脸祛痘
            Mat src = CvInvoke.Imread("face2.jpg");
            Mat dst = new Mat();
            CvInvoke.Imshow("input", src);
            Mat mask = CvInvoke.Imread("mark2.jpg", ImreadModes.Grayscale);
            CvInvoke.Inpaint(src, mask, dst, 1, InpaintType.NS);
            CvInvoke.Imshow("result", dst);
            CvInvoke.WaitKey(0);
        }
    }
}

效果

1、图像分割成不同区域:
在这里插入图片描述
在这里插入图片描述
2、提取图像中的目标物体:
在这里插入图片描述
3、图像修补:
在这里插入图片描述
4、人脸祛痘:
在这里插入图片描述

Opencv分水岭算法——watershed自动图像分割用法 分水岭算法是一种图像区域分割法,在分割的过程中,它会把跟临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性是分水岭算法的一个重要特征。 其他图像分割方法,如阈值,边缘检测等都不会考虑像素在空间关系上的相似性和封闭性这一概念,彼此像素间互相独立,没有统一性。分水岭算法较其他分割方法更具有思想性,... 阅读详情

相关推荐

Emgucv不完整图像分割试验(七)——玉米考种(分水岭分割)

Emgucv3.*下的分水岭分割,网上资料比较少,硬吭了半天,终于踩坑过了。放下原图后最终处理结果。 我为了视觉效果更明显,把分割线膨胀了1。 二值化细节不便透露,此处贴出分水岭分割部分。 注意convertedOriginal 最好不要用Image<Bgr,Byte>,能用Mat就用Mat 注意markerImage 做好不要用Image<Gray,Int3...

qq_26996385的博客 1559

图像分割(Image Segmentation)

作者:王先荣前言    图像分割指的是将数字图像细分为多个图像子区域的过程,在OpenCv中实现了三种跟图像分割相关的算法,它们分别是:分水岭分割算法、金字塔分割算法以及均值漂移分割算法。它们的使用过程都很简单,下面的文章权且用于记录,并使该系列保持完整吧。分水岭分割算法    分水岭分割算法需要您或者先前算法提供标记,该标记用于指定哪些大致区域是目标,哪些大致区域是背景等等;分水岭分割算法的分割...

weixin_34010566的博客 600

emgucv4学习15---分水岭算法

任何一副灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷。我们向每一个山谷中灌不同颜色的水。随着水的位的升高,不同山谷的水就会相遇汇合,为了防止不同山谷的水汇合,我们需要在水汇合的地方构建起堤坝。不停的灌水,不停的构建堤坝直到所有的山峰都被水淹没,我们构建好的堤坝就是对图像的分割。这就是分水 岭算法的背后原理。 OpenFileDialog ofd = new OpenFileDialog(); ...

qianxun 377

【OpenCv】图像分割——分水岭算法

文章目录1 原理2 算法改进3 API4 实例 1 原理   分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明。在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇合处构筑大坝,即形成分水岭。这种方法也称作泛洪法,对应的

weixin_53598445的博客 9513

C#图像处理 | EmguCV+OpenCVSharp二合一教程 你值得拥有

VS2017+EmguCV3.4高清入门视频教程 视频教程原链接如上,内容预览与目录如下 EmguCV+OpenCVSharp视频教程二合一版本 C#视觉开发者必备 EmguCV基础视频教程---第01讲(EmguCV介绍与安装配置) EmguCV基础视频教程---第01讲---补充更新(EmguCV3.4.1安装配置) EmguCV基础视频教程---第02讲(EmguCV自带例程赏析) EmguCV基础视频教程---第03讲(图像读取_显示_保...

Color Space的博客 4417

EmguCV基础视频教程---第29讲(分水岭算法及图像修补).pptx

EmguCV基础视频教程---第29讲(分水岭算法及图像修补).pptx

图像分割 分水岭法 watershed

Watershed算法是一种图像处理算法,它是基于形态学的图像分割方法。在实现中,Watershed算法通常需要先对图像进行预处理,例如去除噪声、边缘检测等操作,以便更好的构建隔板。在填充山谷时,可以使用队列或其他数据结构来实现,以便管理待处理的像素。对于连通的区域,可以使用标记或者颜色来区分。该方法没有返回值,而是直接在markers图像上进行分割操作。最终输出的图像,两个区域间使用-1作为分割线。CvInvoke.Watershed方法用于执行图像的分水岭分割操作。由于.net平台下C#和vb。

学习微软 .net 技术开发 874

R语言基础之R语言入门

R语言最初是由新西兰奥克兰大学统计系的教授Ross Ihaka和Robert Gentleman在S语言基础上开发完成的。是一门解释性语言。在我看来R语言是一门数学性极强的语言,或者说这是一门为数学而生的语言,因为其具有极其出色的计算与统计分析能力...

weixin_46912400的博客 5万+

EmguCV学习笔记 VB.Net 8.2 分水岭法 watershed

EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。教程配套文件及相关说明获得pdf教程和代码。

学习微软 .net 技术开发 1778

银河麒麟服务器操作系统V10SP3 U盘安装中“基础软件仓库错误”的排查与修复指南

本文针对在无网络环境下使用U盘安装银河麒麟服务器操作系统V10SP3时,遇到的“基础软件仓库错误”问题,提供了详细的排查与修复指南。核心解决方案是通过进入救援模式,使用lsblk命令确定U盘实际设备路径,并在系统引导时手动添加inst.repo内核参数来指定安装源,从而绕过安装程序的自动探测故障,确保安装流程顺利进行。

ik67890123的博客 1193

高等数学第五章---定积分(§5.3定积分的计算方法)

这篇博客详细讲解定积分的计算方法,包括直接法、凑微分法、变量代换法和分部积分法。通过典型例题演示如何运用这些技巧计算定积分,特别强调换元必换限的原则和奇偶函数的简化处理。内容涵盖代数变形、三角代换、分段函数积分等常见题型,并附有详细的解题步骤和常见错误分析。适合微积分学习者系统掌握定积分计算技巧,提升解题效率。文中还包含积分等式证明和变限积分函数求导等进阶内容,帮助读者深入理解定积分的应用。

2302_77045867的博客 4330

使用EmguCV进行图像修复

图像修复是重建图像和视频受损部分的过程。这个过程也称为图像或视频的插值。 在EmguCV中,不仅可以修复划痕,还可以去除文本或对象,修复图像可以用 Inpaint函数。参数和用法如下 public static void Inpaint( IInputArray src, IInputArray mask, IOutputArray dst, double inpaintRadius...

任玉腾的博客 1357

Android双目摄像头(RGB+IR)实时预览与人脸活体检测实战指南

本文详细介绍了Android双目摄像头(RGB+IR)实时预览与人脸活体检测的实战指南。通过双摄同步预览、人脸检测与活体判断等技术实现,提升安全认证的准确性和鲁棒性。文章还提供了开发环境搭建、常见问题解决方案及性能优化建议,帮助开发者快速掌握双目摄像头在Android平台的应用。

vulkan6gpu的博客 689

OpenCV 基于分水岭算法的图像分割 - 技术文档 (C#)

分水岭算法是一种基于图像梯度的图像分割方法,广泛应用于图像处理和计算机视觉领域。它能够将图像划分为不同的区域,并识别图像中的对象。本技术文档介绍如何使用OpenCV结合C#实现基于分水岭算法的图像分割。通过以上操作,我们可以实现基于分水岭算法的图像分割。OpenCV结合Emgu CV提供了强大的图像分割功能,可以满足各种图像处理需求。首先,读取图像并进行预处理,包括灰度化、高斯模糊、阈值分割和形态学操作。在分水岭算法应用后,我们绘制并显示分割结果。接下来,应用分水岭算法进行图像分割。

东城十三 527

硬件工程师提前批真题及答案解析2

我们需要考虑题目可能的简化假设,即输入电阻 Ri​ 可能是 rbe​ 和 βre​ 的组合,但题目可能简化为: Ri​≈rbe​+βre​。由于锗管的正向导通电压较小(0.2 V~0.3 V),而硅管的正向导通电压较大(0.6 V~0.7 V),因此-4.7 V的电压差不符合硅管的特性,而更接近锗管的特性。在三极管电路中,静态电位是指在无信号输入时,三极管各电极的直流电压。re​ 是动态发射极电阻,通常可以近似为 re​=IE​VT​​,但在题目中已经给出了 re​=300Ω,因此可以直接使用这个值。

XU157303764的博客 777

UG NX二次开发(C#)-外部模式-批量删除某些图层中的体对象和曲线对象

在 UG NX中,有时需要批量删除某文件夹下多个.prt文件中固定一些图层中的体对象和曲线对象,这时如果采用手动逐个打开模型,并选择针对的图层删除,即耗时也容易遗漏,因此采用外部模式来处理比较方便。本文介绍批量删除某些图层中的体对象和曲线对象。

GimiGimmy 3035

OpenCV学习三十四:watershed 分水岭算法

  1. watershed  void watershed( InputArray image, InputOutputArray markers ); 第一个参数 image,必须是一个8bit 3通道彩色图像矩阵序列,第一个参数没什么要说的。 关键是第二个参数 markers:在执行分水岭函数watershed之前,必须对第二个参数markers进行处理,它应该包含不同区域的轮廓,每...

Thomas会写字 1万+

Power EM与Signal EM解决办法与原理分析

1.面对power EM,首先检查missing via,补全via,还可以加宽,加密局部power mesh,一些power IO出pin有power EM问题,可以叠加多层线和垂直方向补power形成网络降低并联电阻和提供更多电流通路解决,这种方法还可以降低ir drop。3.先进工艺有一个via ladder的方法可以解决power/signal em问题,clock cell出pin绕线或者power rail连接power stripe通过搭梯子的方式连接,原理还是分流。

m0_61544122的博客 4741

OpenCV 学习笔记(Watershed)

OpenCV 学习笔记(Watershed) Watershed,中文一般翻译为分水岭算法。分水岭算法是一种图像区域分割算法,它把位置接近,灰度值也接近的像素点连接起来形成一个封闭的区域。关于分水岭算法的具体原理可以参考下面的网址: wiki 百科 Watershed 这里只介绍在 OpenCV中的如何使用 Watershed 算法。Opencv 中 watershed函数原型如下: void watershed( InputArray image, InputOutputArray markers );

Ivan 的专栏 3928

华为od统一考试B卷【宜居星球改造计划】Java&Go 实现

XXX年,人类通过对火星的大气进行宜居改造分析,使得火星已在理论上具备人类宜居的条件,由于技术原因,无法一次性将火星大气全部改造,只能通过局部处理形式,假设将火星待改造的区域为row * column的网格每个网格有3个值,宜居区、可改造区、死亡区,使用YES、NO、NA代替,YES表示该网格已经完成大气改造,NO表示该网格未进行改造,后期可进行改造,NA表示死亡区,不作为判断是否改造完成的宜居,无法穿过 初始化下,该区域可能存在多个宜居区,并且每个宜居区能同时在每个太阳日单位向上下左右四个方向的相邻格子进

MISAYAONE的博客 1万+

深度学习工具包 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")

OpenCV图像分割-watershed

转自:Tiger & Pi http://blog.163.com/my_645/blog/static/369785222013310619742/ Watershed就是传说中的分水岭算法, 它将一幅图像看成是一块有湖泊和山川组成的地形。 图像灰度值大的像素对应海拔高的山地, 灰度值低的像素对应于海拔低的盆地。Watershed分割是模拟湖水上涨并在湖泊相遇处筑坝...

diyizhi7673的博客 302

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

图像处理:基于cv2.inpaint()图像修补

图像处理:基于cv2.inpaint()图像修补。今天我们将学习如何通过一种“修复”的方法消除旧照片中的小噪音,笔画等。当然,经过我的测试你也可以将其用于削弱混杂了其他的颜色的图像。大多数人家都会有一些旧的的旧化照片,上面有黑点,一些笔触等。你是否曾经想过将其还原?我们不能简单地在绘画工具中擦除它们,因为它将简单地用白色结构代替黑色结构,这是没有用的。在这些情况下,将使用一种称为图像修复的技术。基本思想很简单:用附近的像素替换那些不良区域,使其看起来和邻近的协调。考虑下面显示的图像。

m0_62919535的博客 7500

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OpenCV4-图像分割-watershed(分水岭算法)

分水岭watershed的实战应用

羊羊羊 1671

OpenCV-Python学习笔记(十七):分水岭算法图像分割

分水岭算法图像分割(Image Segmentation with Watershed Algorithm) 目标 本节我们将要学习 • 使用基于掩模的分水岭算法进行图像分割 • 函数:cv2.connectedComponents()、cv2.watershed() 1. 原理 任何一副灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷。我们向每...

GiffordY的博客 3449

图像处理——分水岭算法

首先感谢以下两位的博文帮助我的理解: (1)迈克老狼2012   https://www.cnblogs.com/mikewolf2002/p/3304118.html (2)-牧野-              http://blog.youkuaiyun.com/dcrmg/article/details/52498440 分水岭算法是一种图像区域分割法,在分割的过程中

fengye2two的专栏 8万+

CV基础:区域生长与分水岭算法

向AI转型的程序员都关注了这个号????????????机器学习AI算法工程 公众号:datayx区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则...

datayx的文章 2653
上一篇: 27-图像的矩(EmguCV学习)
下一篇: 30-GrabCut与FloodFill(EmguCV学习)
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值