- 博客(167)
- 收藏
- 关注
原创 图像编辑器 Monica 之 CV 常见算法的快速调参
一. 图像编辑器 MonicaMonica 是一款跨平台的桌面图像编辑软件(早期是为了验证一些算法而产生的)。screenshot.png其技术栈如下:Kotlin 编写 UI(Kotlin Compose Desktop 作为 UI 框架)基于 mvvm 模式,依赖注入使用 koin,编译使用 JDK 17部分算法使用 Kotlin 实现其余的算法使用 OpenCV C++ 来实现,Kotlin...
2025-01-23 22:19:08
897
原创 图像编辑器 Monica 之各种图形绘制、图像调色
一. 图像编辑器 MonicaMonica 是一款跨平台的桌面图像编辑软件(早期主要是个人为了验证一些算法而产生的)。screenshot.png其技术栈如下:Kotlin 编写 UI(Kotlin Compose Desktop 作为 UI 框架)基于 mvvm 模式,依赖注入使用 koin,编译使用 JDK 17。部分算法使用 Kotlin 实现。其余的算法使用 OpenCV C++ 来实现,...
2024-11-29 17:59:40
988
原创 图像编辑器 Monica 之简单 CV 算法的快速调参
一. 图像编辑器 MonicaMonica 是一款跨平台的桌面图像编辑软件(早期主要是个人为了验证一些算法而产生的)。screenshot.png其技术栈如下:Kotlin 编写 UI(使用 Compose Desktop 作为 UI 框架)部分算法使用 Kotlin 实现基于 mvvm 架构,使用 koin 作为依赖注入框架使用 JDK 17 进行编译其余的算法使用 OpenCV C++ 来实现...
2024-11-04 21:45:56
1026
原创 OpenCV 笔记(37):频域高通滤波——高斯高通滤波器、巴特沃斯高通滤波器
1. 高斯高通滤波器与高斯低通滤波器(用于平滑图像、模糊图像)相反,高斯高通滤波器(GHPF)通过抑制低频成分来实现图像锐化。高斯高通滤波器的作用是增强图像中的高频成分,从而突出图像的边缘和细节。高斯高通滤波器的传递函数可以由一个低通滤波器的传递函数转换得到。通常,我们可以用以下公式来表示高斯高通滤波器的传递函数:其中,是截止频率,控制着滤波器的截止范围。值越大,滤波器对低频的抑制变得较弱,更多...
2024-09-20 18:20:48
1805
1
原创 图像编辑器 Monica 之实现好玩的人脸替换功能
一. 图像编辑器 MonicaMonica 是一款跨平台的桌面图像编辑软件,使用 Kotlin Compose Desktop 作为 UI 框架。应用层使用 Kotlin 编写,基于 mvvm 架构,使用 koin 作为依赖注入框架。screenshot.pngscreenshot-version.png从上述图中可以看到,Monica 用到的技术栈包括:Kotlin 编写 UI 和大部分算法(软...
2024-09-12 19:08:47
925
原创 OpenCV 笔记(36):频域高通滤波——理想高通滤波器
1. 频域高通滤波频域高通滤波是一种数字图像处理技术,通过在频域中对图像进行处理增强图像的高频成分,从而达到锐化图像边缘和细节的目的。高频成分: 图像中的高频成分对应着图像的边缘、纹理等细节信息。低频成分: 图像中的低频成分对应着图像的平滑区域。1.1 频域高通滤波和空域高通滤波频域高通滤波和空域高通滤波都是为了增强图像的边缘和细节,但它们在工作原理、实现方式、滤波效果等很多地方有所不同。处理域...
2024-08-27 19:05:39
1614
原创 图像编辑器 Monica 之使用 ONNX Runtime 在端侧部署生成素描画的模型
一. 图像编辑器 MonicaMonica 是一款跨平台的桌面图像编辑软件,使用 Kotlin Compose Desktop 作为 UI 框架。应用层使用 Kotlin 编写,基于 mvvm 架构,使用 koin 作为依赖注入框架。大部分算法也是用 Kotlin 编写,少部分通过 jni 调用 OpenCV C++ 实现的图像处理或调用深度学习的模型。Monica 目前还处于开发阶段,当前版本...
2024-08-19 10:51:02
899
原创 图像编辑器 Monica 之使用 OpenCV DNN 实现人脸、年龄、性别检测
一. 图像编辑器 MonicaMonica 是一款跨平台的桌面图像编辑软件,使用 Kotlin Compose Desktop 作为 UI 框架。由于应用层是由 Kotlin 编写的,Monica 基于 mvvm 架构,使用 koin 作为依赖注入框架。大部分算法用 Kotlin 编写,少部分图像处理算法使用 OpenCV C++ 或调用深度学习的模型。Monica 目前还处于开发阶段,当前版本的...
2024-07-28 22:20:48
433
原创 基于 Compose Desktop 实现的图像编辑器之使用 OpenCV C++ 实现图像增强
一. 图像编辑器 MonicaMonica 是一款跨平台的桌面图像编辑软件,使用 Kotlin Compose Desktop 作为 UI 框架。由于应用层是由 Kotlin 编写的,Monica 基于 mvvm 架构,使用 koin 作为依赖注入框架。部分图像处理算法使用 OpenCV C++ 编写。Monica 目前还处于开发阶段,当前版本的可以参见 github 地址:https://git...
2024-07-19 18:41:57
1025
原创 OpenCV 笔记(35):频域低通滤波——高斯低通滤波器、巴特沃斯低通滤波器
1. 高斯低通滤波器高斯低通滤波器(GLPF)是一种具有平滑频域特性、较慢衰减速度和良好截止频率附近衰减效果的滤波器。在图像处理中有着广泛的应用。高斯低通滤波器的传播函数有如下的形式:其中,D(u,v) 表示中心点到频域中心的距离,即 , 是关于中心分离度的测度。令 ,则:其中, 是截止频率,控制着滤波器的截止范围。当 时,高斯低通滤波器下降到它最大值的 0.607 处。 值越大,允许通过的频...
2024-07-07 22:02:29
1575
原创 OpenCV 笔记(34):频域低通滤波——理想低通滤波器
1. 频域低通滤波1.1 频域滤波频域滤波器是一种通过对图像进行傅里叶变换,然后在频域上选择性地滤除或增强某些频率成分来实现图像滤波的方法。频域滤波和空域滤波都有各自的优缺点和使用场景:特性频域滤波空域滤波原理基于频谱进行操作基于像素进行操作实现计算量较大计算量较小滤波效果灵活可控较简单应用去周期性噪声、增强细节、图像配准去随机噪声、平滑图像、锐化图像频域滤波器的基本步骤如下:对图像进行傅里叶变...
2024-06-25 21:24:25
1845
原创 基于 Compose Desktop 实现的图像编辑器之各种形状的裁剪、图像取色、使用查找表实现的滤镜...
一. 图像编辑器 MonicaMonica 是一款跨平台的桌面图像编辑软件,使用 Kotlin Compose Desktop 进行开发。它基于 mvvm 架构,由于应用层都是由 Kotlin 编写的,所以使用 koin 作为依赖注入框架。Monica github 地址:https://github.com/fengzhizi715/MonicaMonica 目前还处于开发阶段,当前版本的主要功...
2024-06-18 21:08:56
838
原创 OpenCV 笔记(33):二维离散傅里叶变换及其性质
1. 二维离散傅里叶变换DFT 是 Discrete Fourier Transform 即离散傅里叶变换的简称。二维离散傅里叶变换(2D Discrete Fourier Transform,简称 2D DFT)是将二维离散信号(例如数字图像)从空间域变换到频率域的一种数学工具。1.1 定义二维离散傅里叶变换的定义如下:设 f(x,y) 是一个 M×N 的图像,其中 x=0,1,…,M−1 和...
2024-06-05 20:45:54
1414
原创 图像编辑器 Monica 之图像涂鸦、裁剪、有趣的滤镜
一. 图像编辑器 MonicaMonica 是一款跨平台的桌面图像编辑器,使用 Kotlin Compose Desktop 进行开发基于 mvvm 架构,使用 koin 作为依赖注入的框架。Monica 开发的背景和初衷可以看 使用 Kotlin Compose Desktop 开发的图像编辑器。目前 Monica 还处于开发阶段,当前版本的主要功能包括:加载本地图片、网络图片。对图片进行局部模...
2024-05-29 21:23:50
580
原创 OpenCV 笔记(32):图像处理的傅里叶变换——初探
在图像处理中,图像可以用不同域来表示和分析。下面是几种最常用的域:空间域是指由图像像素组成的空间。时域是指图像随时间变化的域。对于动态图像,例如视频,时域表示图像帧随时间的变化。时域处理是指对图像序列进行操作,例如运动分析、视频压缩等。频域是将图像从空间域变换到频率域得到的表示。在频域中,图像被表示为一个二维复数矩阵,其中每个元素代表图像中某一特定频率分量的幅度和相位。图像的空间域、时域和频域是三...
2024-05-17 17:33:50
1166
原创 使用 Kotlin Compose Desktop 开发的图像编辑器
一. 背景前段时间,我抽空用 Kotlin 开发了一款桌面端的图像编辑器,支持多平台。因为 Compose Desktop 本身支持多平台,所以这款图像编辑器可以支持 Mac 、Windows、Linux。做这款工具的初衷是方便自己,这几年在工作上经常跟图像打交道,所以自己需要一款图形化的工具来对图片进行编辑或者快速尝试一下算法的效果。二. 功能图像编辑器——Monica,github 地址:ht...
2024-05-06 19:24:41
646
2
原创 OpenCV 笔记(31):图像锐化算法——拉普拉斯锐化和 USM 锐化
1. 图像锐化和增强图像锐化是一种突出和加强图像中景物的边缘和轮廓的技术,使图像变得更加清晰。它通过增强图像的高频分量来减少图像中的模糊,增强图像细节边缘和轮廓,增强灰度反差,便于后期对目标的识别和处理。图像增强是改善图像质量的技术,包括图像锐化、去噪、对比度增强、色彩增强等。图像锐化是图像增强中的一种重要技术。图像锐化和图像增强的区别在于,图像锐化侧重于突出图像中的细节,而图像增强则可以包括更...
2024-04-28 19:47:53
2195
原创 Windows 下使用 CMake + Visual Studio 2022 编译 OpenCV 4.8.1 及其扩展模块
一. 背景目前维护的某个项目是在 Windows 下运行的,并且使用了 OpenCV 4.5.2 版本。我本地的开发环境是 Mac 并使用了比较新的 OpenCV 4.8.1 版本。为了和本地开发环境保持一致,我打算对项目中使用的 OpenCV 进行升级,因为该项目还是用了扩展模块的一些功能,所以需要自行编译。本文只是记录自己在编译时踩过的坑,避免下次再犯或者给有需要的人。二. 需要准备的软件CM...
2024-04-18 20:39:49
1374
1
原创 OpenCV 笔记(30):图像降噪算法——非局部均值滤波
1. 非局部均值滤波非局部均值滤波(Non-Local Means,NL-Means)是一种非线性的图像去噪算法。它基于图像中的像素具有相似结构这一假设,利用图像的全局信息来对图像进行去噪。1.1 全局算法 VS 局部算法非局部均值滤波在计算每个像素点的估计值时,会考虑图像中所有与该像素点具有相似邻域结构的像素点。因此,非局部均值滤波是一种全局算法。那么相对于全局算法的局部算法是什么呢?局部算法...
2024-04-14 22:46:26
2411
原创 OpenCV 笔记(29):图像降噪算法——高斯双边滤波、均值迁移滤波
边缘保留滤波(Edge Preserving Filter,EPF)是一种图像处理方法,其目的是在减少图像噪声的同时保留图像边缘的细节。它在许多应用中被广泛使用,包括图像增强、边缘检测和特征提取等。边缘保留滤波器通常通过平滑图像的方法来减少噪声。然而,与标准的平滑滤波器不同,边缘保留滤波器会考虑到图像中存在的边缘信息,并尽量避免对边缘进行模糊处理。因此,它能够减少噪声的同时保留图像中的边缘。边缘保...
2024-04-07 19:00:34
1192
原创 OpenCV 笔记(28):图像降噪算法——中值滤波、高斯滤波
1. 图像噪声图像降噪(Image Denoising)是指从图像中去除噪声的过程,目的是提高图像质量,增强图像的视觉效果。图像噪声是指图像中不希望出现的随机亮度或颜色变化,通常会降低图像的清晰度和可辨识度,以及会降低图像的质量并使图像分析和理解更加困难。图像噪声主要有以下几个原因来产生的:光线不足:光线不足会导致光子噪声增加,从而降低图像的信噪比。电子元器件的热噪声:电子元器件在工作时会产生热...
2024-04-01 00:30:05
1616
原创 OpenCV 笔记(27):图像的卷积与滤波
1. 图像的卷积1.1 卷积卷积是一种数学运算,它将两个函数(或矩阵)结合起来,生成一个第三个函数。在图像处理中,卷积通常用于将一个滤波器与图像进行运算。图像的滤波器是一种用于增强或抑制图像中特定特征的工具。它通常是一个小矩阵,定义了如何对图像中的像素进行操作。卷积在图像处理中有很多应用,包括图像平滑、图像锐化、边缘检测和图像分割。1.2 卷积的原理在泛函分析中,卷积(convolution),...
2024-03-24 22:22:40
1089
原创 OpenCV 笔记(26):图像的透视变换
1. 图像的透视变换1.1 简介图像的透视变换(Perspective Transformation)是指将图像投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。透视变换是一种非线性变换,它可以将一个二维坐标系中的点映射到三维坐标系中的点,然后再将其投影到另一个二维坐标系中的点。透视变换可以改变图像中的形状,并可以模拟真实世界中的透视效果...
2024-03-13 15:28:03
836
原创 OpenCV 笔记(25):图像的仿射变换
1. 几何变换图像的几何变换是指将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置,其实质是改变像素的空间位置,估算新空间位置上的像素值。几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。以下是常用的几种几何变换:旋转:将图像旋转指定角度。缩放:按缩放因子调整图像大小,使其变大或变小。平移:将图像从当前位置移动到新位置。错切:沿特定轴倾斜图像。仿射变换:一个更广泛的类别,包括单个...
2024-03-09 22:11:52
1115
原创 OpenCV 笔记(24):图像金字塔
1. 尺度空间和图像金字塔尺度空间是图像在不同尺度下的连续表示。其中最常见的是使用高斯核对图像进行卷积。高斯滤波可以平滑图像,从而消除图像中的细微细节。随着高斯滤波核尺度的增加,图像变得越来越平滑,直到只剩下最基本的特征。图像金字塔是尺度空间的一种具体实现方式。它是由一系列不同分辨率的图像组成,这些图像以金字塔的形状排列如下图所示。图像金字塔.png常见的图像金字塔有以下几种:高斯金字塔(Gau...
2024-02-29 09:43:57
654
原创 OpenCV 笔记(23):图像的缩放——图像的缩放——立方插值、Lanczos 插值算法
1. 立方插值立方插值算法也被称为双三次、双立方插值算法。1.1 三次插值 (Cubic Interpolation)先介绍一下三次插值算法,它是一种使用三次多项式拟合一组数据的插值方法。三次插值通常用于图像缩放和重采样。三次插值的实现方式有很多种,例如牛顿多项式插值、拉格朗日多项式插值、Hermite 三次多项式插值、三次样条插值,每种方式都有其自身的优点和复杂性。插值多项式的形式牛顿多项式插...
2024-02-23 10:50:46
2049
原创 OpenCV 笔记(22):图像的缩放——最近邻插值、双线性插值算法
1. 图像缩放1.1 简介图像缩放是指通过增加或减少像素来改变图像尺寸的过程,是图像处理中常见的操作。图像缩放会涉及效率和图像质量之间的权衡。图像放大(也称为上采样或插值)的主要目的是放大原图像,以便在更高分辨率的显示设备上显示。但是,放大图像并不能带来更多信息,因此图像质量会不可避免地受到影响。图像缩小(也称为下采样)的主要目的是减小图像尺寸,以便更有效地存储或传输。缩小图像可以保留更多信息,但...
2024-02-14 14:46:54
1823
原创 OpenCV 笔记(21):图像色彩空间
1. 图像色彩空间图像色彩空间是用于定义颜色范围的数学模型。它规定了图像中可以使用的颜色以及它们之间的关系。它决定了图像中可以显示的颜色范围。不同的色彩空间可以包含不同的颜色范围,因此选择合适的色彩空间对于确保图像在不同设备上看起来一致非常重要。图像色彩空间的意义主要体现在以下几个方面:统一颜色标准:色彩空间提供了一种统一的颜色标准,使得不同设备之间能够相互理解和交流颜色信息。确保颜色一致性:色...
2024-02-08 21:03:04
1364
原创 OpenCV 笔记(20):霍夫圆检测
1. 霍夫圆变换霍夫圆变换(Hough Circle Transform)是一种数字图像处理中的特征提取技术,用于在图像中检测圆形。它将二维图像空间中一个圆转换为该圆半径、圆心横纵坐标所确定的三维参数空间中一个点的过程。因此,圆周上任意三点所确定的圆,经霍夫变换后在三维参数空间应对应一点。霍夫圆变换的优点:通用性强,可以检测任意大小、形状的圆形。效率高,可以快速检测出图像中的圆形。霍夫圆变换的缺...
2024-02-04 15:58:09
2816
1
原创 OpenCV 笔记(19):霍夫直线检测
1. 霍夫空间和霍夫变换1.1 霍夫空间霍夫空间(Hough space)是一种用于图像分析的特征空间,用于描述图像中具有相同形状的线段或曲线。霍夫空间是指将图像空间中的点映射到参数空间后形成的空间。参数空间的维度由形状的描述参数的个数决定。例如,对于直线检测,参数空间的维度为 2,其中一个维度表示直线的斜率,另一个维度表示直线的截距。对于圆检测,参数空间的维度为 3,这三个参数分别是圆心坐标和...
2024-01-28 20:26:18
867
原创 OpenCV 笔记(18):轮廓的更多属性
该系列文章前面几篇介绍了轮廓以及其矩特征、几何特征等等。本文会介绍轮廓更多的属性,它们可用于识别和分类物体、测量形状和分析图像。1. 长宽比长宽比是轮廓的宽度与高度的比值。它可以用于识别物体的形状。2. 矩形度矩形度是轮廓区域面积与其最小外接矩形区域面积的比值。它是衡量轮廓与矩形相似程度的一个参数。3. 范围范围是轮廓区域面积与其外接矩形区域面积的比值。它可以用于衡量轮廓的大小。下面的例子是...
2024-01-21 12:28:02
515
原创 OpenCV 笔记(17):轮廓的椭圆拟合、直线拟合
1. 椭圆拟合轮廓的椭圆拟合是指用椭圆来近似轮廓的形状。当这个椭圆的长轴和短轴相等时,它就是一个圆。椭圆拟合的基本思路是:对于给定平面上的一组样本点,寻找一个椭圆,使其尽可能接近这些样本点。也就是说,将图像中的一组数据以椭圆方程为模型进行拟合,使某一椭圆方程尽量满足这些数据,并求出该椭圆方程的各个参数。椭圆拟合有以下几种常用方法:最小二乘法:最小二乘法是基于最小化拟合误差的思想,通过迭代的方法求...
2024-01-14 19:18:30
2170
原创 OpenCV 笔记(16):轮廓的几何特征
在该系列第十四篇文章中,介绍了很多轮廓的基础特征,包括面积、周长、质心、凸包等等,它们也都是轮廓的几何特征。本文主要介绍的是轮廓形状拟合。轮廓形状拟合是指通过数学模型来近似轮廓的形状。轮廓形状拟合有助于简化轮廓的表示,并提取轮廓的几何特征,所以它的作用如下:简化轮廓:可以使用简单的几何形状来近似复杂的轮廓,从而简化轮廓分析。提取形状特征:可以使用轮廓形状拟合来提取形状特征,例如轮廓的长宽比、面积、...
2024-01-08 11:45:13
1272
原创 OpenCV 笔记(15):轮廓的矩特征
矩(moment)是概率与统计中的一个概念,是随机变量的一种数字特征,是对变量分布和形态特点的一组度量。矩的定义如下:其中,f(x) 是随机变量的概率密度函数或概率质量函数,n 是正整数表示矩的阶数。矩可以用来描述变量的均值、方差、偏度、峰度等特性。矩的性质如下:零阶矩是变量的均值。一阶矩是变量的均方根。二阶矩是变量的方差。三阶矩是变量的偏度。四阶矩是变量的峰度。在图像处理中,图像的矩是指图像的...
2024-01-05 09:10:10
641
原创 OpenCV 笔记(14):图像的轮廓和轮廓的基础特征
Part11. 图像的轮廓在该系列第三篇文章中,曾经简单地介绍过轮廓和轮廓发现。11.1 轮廓的基本概念图像的轮廓是指图像中具有相同颜色或灰度值的连续点的曲线。轮廓和边缘是有联系的,边缘是轮廓的基础,轮廓是边缘的连续集合。轮廓和边缘的区别是:轮廓是连续的,边缘可以是连续的,也可以是离散的。轮廓是完整的,边缘可以是完整的,也可以是不完整的。轮廓可以有各种形状,边缘通常是线性的。21.2 轮廓发现和...
2023-12-29 18:58:12
1055
原创 OpenCV 笔记(13):连通域分析
Part11. 图像的连通域以及连通域分析在该系列第六篇文章中,曾经介绍过连通的概念,下面再来回顾一下。连通:若 S 是图像中的一个像素子集,对于任意的 、。如果存在一条由 S 中像素组成的从 p 到 q 的通路,则称 p 在像素集 S 中与 q 连通。连通域是指具有相同属性的连通集合。例如,在一个二值图像中,具有相同像素值的区域构成一个连通域。所以,连通和连通域是两个不同的概念,连通域是连通的子...
2023-12-25 13:36:51
1827
原创 OpenCV 笔记(12):常用的边缘检测算子—— Canny
Part11. Canny 算子产生的背景一阶导数、二阶导数的边缘算子虽然简单易用,但存在一些缺点。例如容易受噪声影响,容易产生虚假边缘。John F. Canny 在 1986 年提出了 Canny 边缘检测算法。它是结合了梯度计算方法和非极大值抑制技术的一种边缘检测算法。该算法克服了之前的边缘检测算法在抑制噪声和保持边缘信息方面的缺陷,具有较好的性能。Canny 边缘检测算法的优点:能够有效地...
2023-12-18 13:46:51
1145
原创 OpenCV 笔记(11):常用的边缘检测算子—— DoG
Part11. DoG 算子DoG(Difference of Gaussians)高斯差分是计算机视觉中一种用于图像增强和角点检测的算子。它是将两个不同尺度的高斯模糊图像进行差分得到的。高斯模糊可以平滑图像中的噪声和细节,而差分可以突出图像中的边缘和角点。DoG 算子利用这两个特性,在保留图像边缘和角点的同时,去除噪声和细节。DoG 在图像处理领域有着广泛的应用,例如:图像增强角点检测边缘检测...
2023-12-15 11:26:34
797
原创 OpenCV 笔记(10):常用的边缘检测算子—— Laplace、LoG
在该系列的第八篇文章中,我们曾介绍过一阶导数和二阶导数对分析边缘的结论:一阶导数通常在图像中产生较粗的边缘;二阶导数对精细细节,如细线、孤立点和噪声有较强的响应;二阶导数在灰度斜坡和灰度台阶过渡处会产生双边缘响应;二阶导数的符号可用于确定边缘的过渡是从亮到暗还是从暗到亮。一阶导数算子(例如 Sobel 算子)通过对图像求导来确定图像的边缘,数值绝对值较高的点对应了图像的边缘。如果继续求二阶导,原先...
2023-12-11 09:28:10
1236
原创 OpenCV 笔记(9):常用的边缘检测算子—— Roberts、Prewitt、Sobel
在本文开始之前,我们先了解一下算子的概念。算子英语是 Operator,它是一个函数空间到函数空间上的映射 O:X→X。广义上的算子可以推广到任何空间。函数是从数到数的映射。泛函是从函数到数的映射。算子是从函数到函数的映射。算子不等同于函数,也不等同于算法。算法是更为广泛的概念,它包含了算子。Part11. Roberts 算子我们知道用 L1 范数来近似梯度的幅度:其中,在 x 方向,由偏导公式...
2023-12-04 09:28:34
1917
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人