- 博客(95)
- 收藏
- 关注
原创 深度学习自学笔记二:逻辑回归和梯度下降法
在预测阶段,给定新的输入特征x,我们可以使用训练好的权重向量w和偏置b,将其代入逻辑回归模型,并通过sigmoid函数计算输出概率g(z)。对于每个样本i,逻辑回归模型的预测值表示为y_hat_i,它是通过将输入特征x_i代入逻辑回归模型中计算得到的。其中,J(w, b)表示代价函数,w和b表示权重向量和偏置,m表示样本数量,y_i表示第i个样本的真实标签,y_hat_i表示对应的预测值。梯度下降法的基本思想是通过迭代更新参数,沿着代价函数的负梯度方向移动,以逐步接近代价函数的最小值。
2023-09-23 06:13:37
702
原创 深度学习自学笔记一:神经网络和深度学习
因此,为了替代一条可能会让价格为负的直线,应把直线弯曲一点,让它最终在零结束。神经网络和深度学习紧密相关,因为深度学习是以神经网络为基础的。与传统机器学习方法相比,深度学习能够自动地从原始数据中学习到更高级别的抽象特征,从而提高了模型的性能和表现能力。这些应用都受益于神经网络的强大表示学习能力和深度学习的非线性建模能力,从而提供了更准确和高效的解决方案。把房屋的面积作为神经网络的输入(称之为x),通过一个节点(一个小圆圈),最终输出价格(用y表示),这个小圆圈就是一个单独的神经元。
2023-09-23 05:10:04
367
原创 OpenCV自学笔记二十二:绘图及交互
创建了一个名为"Brightness"的滚动条,范围为[-100, 100],初始值为100。通过设置回调函数`update_brightness`,当滚动条的值发生变化时,根据滚动条值的变化修改图像的亮度,并在窗口中实时显示调节后的图像。上述示例代码创建了一张空白图像,在鼠标左键按下时,在鼠标位置绘制一个红色的圆形;最后,显示出绘制结果。- fontFace: 字体类型,例如cv2.FONT_HERSHEY_SIMPLEX。- cv2.EVENT_RBUTTONDOWN: 右键按下事件。
2023-09-22 16:32:23
341
原创 OpenCV自学笔记二十六:人脸检测
在上述示例中,我们首先加载训练数据集,并将每个人脸图像和对应的标签存储在`face_images`和`face_labels`列表中。接下来,加载要进行人脸识别的测试图像,并使用`predict()`函数对测试图像进行识别,得到预测的标签和置信度。最后,输出识别结果和置信度。接下来,加载要进行人脸识别的测试图像,并使用`predict()`函数对测试图像进行识别,得到预测的标签和置信度。接下来,加载要进行人脸识别的测试图像,并使用`predict()`函数对测试图像进行识别,得到预测的标签和置信度。
2023-09-22 16:23:59
975
原创 OpenCV自学笔记二十五:K均值聚类
在上述示例中,我们首先加载了一个图像,并将其转换为一维数组形式,也就是将每个像素的RGB值合并到一个数组中。接下来,使用`train()`函数进行聚类,得到每个数据点对应的聚类标签和聚类中心。然后,根据聚类标签,将原始图像中的每个像素的颜色替换为相应聚类中心的颜色。在OpenCV中,K均值聚类的函数为`cv.ml.Kmeans_create()`。运行以上代码,将展示原始图像和经过K均值聚类算法量化后的图像。其中,`setK()`函数设置了16个聚类,即将图像的颜色量化为16种。K均值聚类的原理很简单,
2023-09-22 16:08:30
300
原创 OpenCV自学笔记二十四:支持向量机
然后,通过`setType()`函数设置SVM的类型为C_SVC(多类别分类)。接下来,准备训练数据`trainData`和对应的标签`responses`。最后,准备测试数据`testData`,并使用`predict()`函数对测试数据进行分类预测。不同的问题需要使用不同的SVM类型和参数设置,具体可参考OpenCV的文档和函数说明。在OpenCV中,SVM的函数为`cv.ml.SVM_create()`。运行以上代码,将输出结果为`结果: 1.0`,表示测试数据被分类为标签1。
2023-09-22 15:57:00
296
原创 OpenCV自学笔记二十三:K近邻算法
对于分类问题,KNN算法将未知样本与训练集中的样本逐个比较距离,并选择距离最近的K个邻居样本,根据这K个邻居样本的标签进行投票,将未知样本归类为票数最多的标签。回归问题与分类问题类似,只是需要使用`cv.ml.KNearest_create()`创建的KNN对象设置`cv.ml.KNearest_REGRESSOR`标志,并且使用`findNearest()`函数的返回值来得到预测的连续值。在OpenCV中,KNN算法的函数为`cv.ml.KNearest_create()`。
2023-09-22 15:52:09
392
原创 OpenCV自学笔记二十一:视频处理
在OpenCV中,`VideoCapture`类提供了一系列函数来读取和控制视频流。以下是一些常用的`VideoCapture`类函数说明:1. `isOpened()`:检查视频是否成功打开。返回一个布尔值,True表示成功打开,False表示未成功打开。2. `open(filename or device)`:打开视频文件或设备(如摄像头)。参数可以是视频文件名,也可以是摄像头设备索引(通常为0)。函数返回一个布尔值,True表示成功打开,False表示未成功打开。
2023-09-21 20:33:17
312
原创 OpenCV自学笔记二十:图像分割和提取
分水岭算法是一种经典的图像分割算法,用于将图像中的前景和背景进行分离。它基于图像中的灰度值和梯度信息来确定边界,并通过填充区域将图像分割成多个连通的区域。以下是分水岭算法的基本原理:1. 预处理:首先对输入图像进行预处理操作,例如灰度化、平滑滤波和边缘检测等,以便更好地捕捉图像的特征。2. 计算梯度图:根据图像的梯度信息,生成一个梯度图像,用于表示图像中不同区域的边缘强度。3. 标记种子点:选择一些合适的种子点作为分水岭算法的起始标记点。这些种子点可以手动选择,也可以通过其他分割算法自动选择。
2023-09-21 20:21:58
549
原创 OpenCV自学笔记十九:霍夫变换
霍夫直线变换(Hough Line Transform)是一种用于在图像中检测直线的技术。它能够从图像中提取出直线的参数,例如直线的斜率和截距。霍夫直线变换的基本原理是在参数空间中累加直线的交点。对于每个图像中的边缘点,它们代表了可能的直线候选。通过对这些候选直线进行计数,可以找到在参数空间中累积计数最高的直线,从而得到图像中的直线。示例:在上述示例中,我们首先使用`cv2.imread()`函数读取图像,并将其转换为灰度图像。
2023-09-21 20:01:28
218
原创 OpenCV自学笔记十八:模板匹配
该函数接受三个参数:待匹配的主图像、模板图像和匹配方法。模板匹配通过在待匹配图像上滑动一个固定大小的模板图像,并计算模板与图像之间的相似度来寻找匹配位置。OpenCV库提供了用于模板匹配的函数,可以帮助我们在图像中定位和识别特定的模式。最后,使用Matplotlib库的`plt.subplot()`和`plt.imshow()`函数显示原始图像、模板图像和匹配结果图像。这对应于找到的最佳匹配位置。在上述示例中,我们首先使用`cv2.imread()`函数读取主图像和模板图像,并将它们转换为灰度图像。
2023-09-21 19:52:37
242
原创 OpenCV自学笔记十七:傅里叶变换
傅里叶变换(Fourier Transform)是一种将信号从时域转换到频域的数学变换。它将一个连续或离散的时域信号分解为一组正弦和余弦函数的复合。在Python中,可以使用NumPy库来实现傅里叶变换。具体步骤如下:2. 准备输入信号数据,可以是离散的时间序列数据或连续的函数。这将返回一个复数数组`X`,其中包含了信号在频域的表示。4. 对结果进行频谱转换,得到幅度谱和相位谱。5. 可选:对频域信号做其他处理。
2023-09-21 19:48:04
598
原创 OpenCV自学笔记十六:直方图处理
最后,我们使用Matplotlib库的`plot()`函数绘制直方图,并使用`title()`、`xlabel()`和`ylabel()`函数添加标题和坐标轴标签。该函数接受多个参数,包括要计算的图像、通道数、掩码等。它可以帮助我们了解图像中不同强度级别的像素数量,并根据直方图的形状来判断图像的亮度分布。通过OpenCV中的直方图计算函数,我们可以方便地获取图像的直方图并进行进一步的图像处理、分析和视觉化。- 色彩分布:彩色直方图可以显示图像中不同颜色通道的像素数量,从而帮助我们了解图像的色彩分布情况。
2023-09-21 19:36:10
202
原创 OpenCV自学笔记十五:图像轮廓
在遍历每个轮廓时,我们分别使用`cv2.minAreaRect()`函数计算最小包围矩形,并使用`cv2.boxPoints()`函数将矩形转换为四个角点。在OpenCV中,可以使用`cv2.findContours()`函数来查找图像中的轮廓,并使用`cv2.drawContours()`函数将轮廓绘制到图像上。需要注意的是,Python中的OpenCV返回的Hu矩是以浮点数形式表示的,如果需要转换为通常的对数形式,可以使用`np.sign()`和`np.log10()`函数进行转换。
2023-09-21 19:18:16
533
原创 OpenCV自学笔记十四:
图像金字塔是一种多尺度表示图像的方法,它通过构建图像的不同分辨率层级来捕捉图像中的细节和整体结构。图像金字塔可以用于许多计算机视觉任务,例如图像融合、目标检测和特征匹配等。图像金字塔主要有两种类型:高斯金字塔和拉普拉斯金字塔。
2023-09-21 18:57:13
344
原创 OpenCV自学笔记十四:Canny边缘检测
Canny边缘检测是一种常用的图像边缘检测算法,它结合了多种技术,并在实践中表现出良好的性能。只有高于高阈值的像素被认为是真正的边缘,而介于高低阈值之间的像素被认为是弱边缘。该函数的两个参数是阈值`threshold1`和`threshold2`,用于控制边缘检测的敏感度。根据经验,`threshold1`通常设为较小的值,而`threshold2`设为`threshold1`的3倍或4倍。Canny边缘检测算法通过上述步骤,能够有效地提取图像中的边缘信息,并具有良好的抑制噪声和连续性保持的特性。
2023-09-21 18:40:25
488
1
原创 OpenCV自学笔记十三:图像梯度
Sobel算子是一种常用于图像边缘检测的算法,它利用了图像中像素灰度值的变化来寻找边缘。在OpenCV中,可以使用函数cv2.Sobel()来实现Sobel算子的功能。在这个示例中,我们首先读取一张灰度图像,然后分别应用Sobel算子的x和y方向的核,通过`cv2.Sobel()`函数实现。第二个参数`cv2.CV_64F`指定了输出图像的深度。ksize参数指定了Sobel算子的大小,这里设为3表示使用3x3的核。
2023-09-21 18:31:19
500
原创 OpenCV自学笔记十二:形态操作(二)
在上述代码中,首先将图像以灰度模式加载,然后定义一个5x5的正方形结构元素,接着利用`cv2.morphologyEx()`函数进行开运算,然后将原始图像与开运算结果相减,得到礼帽运算的结果。在上述代码中,首先将图像以灰度模式加载,然后定义一个5x5的正方形结构元素,接着利用`cv2.morphologyEx()`函数进行闭运算,然后将闭运算结果与原始图像相减,得到黑帽运算的结果。你可以根据需要定义不同的核来实现不同的图像处理效果,也可以尝试不同的核大小和数值来调整滤波效果。
2023-09-21 18:18:28
583
原创 OpenCV自学笔记十一:形态学操作(一)
最后,通过`imshow()`函数显示原始图像和腐蚀后的图像。- `op`:操作类型,可选值包括`cv2.MORPH_ERODE`(腐蚀)、`cv2.MORPH_DILATE`(膨胀)、`cv2.MORPH_OPEN`(开运算)、`cv2.MORPH_CLOSE`(闭运算)等。在上述示例中,我们首先定义了一个核(结构元素)`kernel`,然后使用`morphologyEx()`函数分别进行腐蚀、膨胀、开运算和闭运算等操作,并通过`imshow()`函数显示原始图像和处理后的图像。这样就实现了闭运算。
2023-09-21 13:20:21
418
原创 OpenCV自学笔记十:图像平滑处理
GaussianBlur()`函数接受三个参数,第一个参数是输入图像,第二个参数是滤波器的大小(这里设置为5x5),第三个参数是高斯核的标准差(设置为0表示自动根据滤波器大小计算)。`boxFilter()`函数接受三个参数,第一个参数是输入图像,第二个参数是输出图像的深度(-1表示与输入图像相同的深度),第三个参数是滤波器的大小(这里设置为5x5)。在每次计算中,卷积核以一个固定的步幅(stride)在输入图像上滑动,与输入图像的局部区域进行逐元素乘积并求和,得到输出图像的一个像素值。
2023-09-21 12:32:05
551
原创 OpenCV自学笔记九:阈值处理
接着使用自适应阈值处理函数`cv2.adaptiveThreshold()`对灰度图像进行自适应阈值处理,得到处理后的图像(`adaptive_image`)。4. Otsu处理(Otsu's Thresholding):Otsu处理是一种自动确定二值化阈值的方法,它通过最小化类间方差或最大化类内方差的方式,找到最佳的阈值。1. 阈值处理(Thresholding):阈值处理是一种图像分割的方法,它根据像素灰度值与设定的阈值进行比较,将像素分为两个类别(例如黑白、前景背景等)。
2023-09-21 09:37:55
646
原创 OpenCV自学笔记八:几何变换
缩放是指改变图像的尺寸大小。在OpenCV中,可以使用`cv2.resize()`函数来实现图像的缩放操作。该函数接受源图像、目标图像大小以及插值方法作为参数。示例代码:i。
2023-09-21 09:32:01
682
原创 OpenCV自学笔记六:色彩空间类型转换
另外,当需要在图像上叠加绘制时,alpha通道也非常有用,可以控制绘制的透明度,实现更加复杂的合成效果。最后,将alpha通道添加到图像的第四个通道上,并保存带有alpha通道的图像为PNG格式。运行代码后,将会生成一个带有alpha通道的图像文件 "image_with_alpha.png",其中圆形区域是不透明的,其他区域是透明的。在RGBA图像中,R、G、B通道分别表示红色、绿色和蓝色通道,而A通道表示alpha通道。2. RGB:RGB色彩空间是由红、绿、蓝三个通道组成的,顺序与BGR相反。
2023-09-13 16:51:16
320
原创 OpenCV自学笔记六:图像加密和解密、数字水印、脸部打码与解码
接下来,将图像转换为灰度图像(使用`cv2.cvtColor()`函数),然后使用人脸检测器对灰度图像进行人脸检测(使用`face_cascade.detectMultiScale()`函数)。接下来,通过将水印图像转换为灰度图像(使用`cv2.cvtColor()`函数)和原始图像进行加权融合(使用`cv2.addWeighted()`函数),将水印嵌入到原始图像中。最后,使用`cv2.imshow()`函数显示原始图像、加密后的图像和解密后的图像。最后,通过从混合图像中减去原始图像,提取出水印图像。
2023-09-12 15:14:59
722
原创 OpenCV自学笔记五:图像运算1
在这个示例中,首先使用`cv2.imread()`函数读取了两张图像,然后使用`cv2.resize()`函数将第二张图像调整为和第一张图像相同的尺寸。例如,在Python中使用OpenCV库进行图像加法运算时,可以使用`cv2.add()`函数,其中第一个参数是第一张图像,第二个参数是第二张图像,函数返回的结果即为相加后的图像。只需将`cv2.add()`函数替换为相应的运算符,如`cv2.subtract()`、`cv2.multiply()`和`cv2.divide()`。
2023-09-11 23:06:05
120
原创 OpenCV自学笔记四:感兴趣区域(ROI)、通道操作、获取图像性质
感兴趣区域(ROI)是指在图像或画面中,我们所关注或感兴趣的特定区域。对于图像处理任务,使用ROI可以提取、操作或分析该区域的特征。在OpenCV中,可以使用numpy数组的切片操作来定义和提取ROI。在上述代码中,定义了一个ROI的范围,其中`(x, y)`是ROI左上角的坐标,`width`和`height`是ROI的宽度和高度。通过切片操作`img[y:y+height, x:x+width]`,即可从原始图像中提取出ROI。可以根据具体的场景和需求,自定义ROI的位置和大小。
2023-09-11 17:29:53
1753
原创 OpenCV自学笔记三:图像的基本表达方法和像素处理
由于OpenCV中的图像实际上是基于Numpy数组的,你可以使用Numpy提供的索引方式来访问图像的像素值。例如,可以使用`img[y, x, c]`或`img[y][x][c]`来获取坐标`(x, y)`处通道`c`的像素值。请注意,像素坐标的索引是以(行,列)的形式定义的,其中行代表y坐标,列代表x坐标。通过图像的行和列的坐标,可以直接访问对应位置的像素值。可以使用`img.item(y, x, c)`或`img.item((y, x, c))`来获取坐标`(x, y)`处通道`c`的像素值。
2023-09-11 16:22:38
405
原创 OpenCV自学笔记二:读取、显示、保存图像
这是OpenCV中最常用的函数之一,用于从文件中读取图像。它接受一个参数作为图像文件的路径,并返回一个表示图像的NumPy数组对象。这个函数用于从图像文件的原始数据(如字节流)中读取图像。它接受两个参数:图像数据和读取标志(例如`cv2.IMREAD_COLOR`、`cv2.IMREAD_GRAYSCALE`等),并返回一个表示图像的NumPy数组对象。除了OpenCV提供的函数外,还可以使用Scikit-image库中的`imread()`函数来读取图像。
2023-09-11 11:00:14
189
原创 OpenCV自学笔记一:OpenCV简介和环境的配置
OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉库,旨在提供一套丰富的图像处理和计算机视觉算法。它由一系列C++函数和用C/C++编写的库组成,并提供了Python、Java和MATLAB等常见编程语言的接口。OpenCV提供了各种功能和算法,包括但不限于以下内容:1. 图像读取和显示:OpenCV可以加载和保存多种图像格式,并提供灵活的图像显示功能。
2023-09-11 10:37:33
175
原创 ROS自学笔记十:环境配置
其中,`<ros_version>`是你安装的ROS版本(如melodic、noetic等)。如果你希望每次启动终端时自动加载ROS环境变量,可以将上述命令添加到你的`.bashrc`文件中。3. 创建和管理工作区:在ROS中,工作区是用于组织、构建和运行ROS包的目录。2. 设置ROS环境变量:在终端中打开一个新的窗口或会话,并执行以下命令来设置ROS环境变量。4. 设置工作区环境变量:在当前终端会话中,执行以下命令来设置工作区的环境变量。这样,你就可以在该终端会话中使用你的ROS功能包。
2023-07-10 01:03:05
709
原创 ROS自学笔记九:创建并构建ROS功能包
以上是创建和构建ROS功能包的基本步骤。根据你的具体需求,你可能还需要添加其他文件、修改CMakeLists.txt或package.xml文件等。你可以在`src`文件夹中编写C++或Python代码,或者在`launch`文件夹中编写启动文件。3. 创建一个ROS功能包。使用`catkin_create_pkg`命令来创建功能包,指定功能包的名称以及它所依赖的其他软件包。你可以使用`rosrun`命令来运行你的ROS节点。2. 打开终端,并进入你想要创建功能包的目录。4. 进入新创建的功能包目录。
2023-07-10 00:39:24
720
原创 ROS自学笔记八:Gazebo
Gazebo是一款开源的多机器人仿真器,用于模拟和测试机器人系统。它提供了一个类似真实环境的三维仿真环境,可以用于模拟各种机器人、传感器、环境和任务。以下是Gazebo的一些主要特点和功能:1. 逼真的3D仿真:Gazebo提供了高度逼真的物理引擎和图形渲染,能够准确地模拟物体之间的物理交互、碰撞和运动。2. 多机器人支持:Gazebo支持同时模拟多个机器人,可以进行多机器人系统的协同控制和仿真。
2023-07-07 13:39:14
7185
原创 ROS自学笔记七:Rviz简介
RViz(Robot Visualization)是一个用于可视化机器人系统的开源工具,用于显示和调试机器人的传感器数据、状态信息和运动规划等。它是ROS(Robot Operating System)的一部分,是ROS中最常用的可视化工具之一。RViz提供了丰富的功能和可定制的界面,使用户能够以三维方式查看机器人模型、传感器数据和环境地图等。它支持多种类型的可视化对象,包括点云、网格模型、标记、路径、激光扫描和相机图像等。
2023-07-07 10:52:15
11841
1
原创 基于CoppeliaSim和KUKA youBot的移动机械臂抓取仿真(五):youBot智能抓取四层汉诺塔仿真
用钢铁意志,成就不平凡人生。上期我们学习了KUKA youBot机械臂轨迹规划这期我们学习youBot智能抓取四层汉诺塔仿真完整附件见最后链接通过上述对KUKA youBot底盘和机械臂运动学分析与仿真,我们可以进一步理解和掌握移动机械臂的运动规划和控制。移动机械臂的运动规划涉及两个主要方面,移动平台的运动规划和机械臂轨迹规划。移动平台的运动规划建立在自主定位和建图的基础上,在包含动态和静态障碍物的环境中,寻找避开障碍物的最优路径,使机器人能够尽快到达目标点。
2023-07-01 00:31:45
1359
原创 基于CoppeliaSim和KUKA youBot的移动机械臂抓取仿真(四):KUKA youBot机械臂轨迹规划
用钢铁意志,成就不平凡人生。上期我们学习了用代码控制KUKA youBot移动底盘运动这期我们学习KUKA youBo机械臂轨迹规划,可以参考完整附件见最后链接。
2023-07-01 00:07:37
1044
原创 基于CoppeliaSim和KUKA youBot的移动机械臂抓取仿真(三): 用代码控制KUKA youBot移动底盘运动
用钢铁意志,成就不平凡人生。上期我们学习了CoppeliaSim安装和操作界面介绍这期我们学习用代码控制机器人运动,可以参考学习用代码控制机器人运动,就必须掌握KUKA youBot移动底盘运动学,KUKA youBot移动底盘采用麦克纳姆轮结构,这种结构可以实现全向移动和旋转的能力,使机器人在狭小空间中更加灵活和可靠。为了实现youBot底盘的精确控制,我们需要建立其运动学模型,并解决逆运动学问题。本章着重研究youBot底盘的逆运动学问题,推导出底盘各轮的速度与底盘姿态之间的关系,并进行运动仿真分析。
2023-06-28 11:33:10
2123
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅