当前位置: 首页 > news >正文

将图像的锯齿状边缘变得平滑的方法

项目背景

使用PaddleSeg 192x192 模型分割出来的目标有锯齿状边缘,想通过传统算法将这种锯齿状边缘的变得平滑,虽然试了很过方法,但是效果还是不太理想

常用的集中方法

当使用分割算法(如分水岭分割、阈值分割等)分割出目标后,有几种方法可以将目标的锯齿状边缘变得平滑。以下是一些常用的方法:

  1. 双边滤波:如前面示例所示,双边滤波是一种能够平滑图像边缘并减少锯齿状边缘的有效方法。它同时考虑了空间信息和颜色信息,以确保平滑处理不会损失目标的边缘细节。

  2. 高斯滤波:高斯滤波是一种线性滤波方法,可以用来平滑图像。通过调整高斯滤波的内核大小和标准差,可以实现不同程度的平滑效果。较大的内核和较小的标准差通常会产生更平滑的结果。

  3. 中值滤波:中值滤波是一种非线性滤波方法,它用目标周围的像素值的中值来替代目标像素值。这种方法对于去除孤立的噪声和锯齿状边缘非常有效。

  4. 边缘保留滤波:边缘保留滤波(如基于导向滤波的方法)可以在保留图像边缘的同时,平滑非边缘区域。这种方法通常用于保留目标的细节。

通常,双边滤波是一种通用方法,可以保持边缘细节并减少锯齿状边缘,但你也可以尝试其他方法,以获得最适合你应用的效果。

OpenCV中实现的调用

  1. 双边滤波
#include <opencv2/opencv.hpp>int main() {cv::Mat inputImage = cv::imread("input.jpg");cv::Mat smoothedImage;// 应用双边滤波cv::bilateralFilter(inputImage, smoothedImage, 9, 75, 75);cv::imshow("原始图像", inputImage);cv::imshow("双边滤波后的图像", smoothedImage);cv::waitKey(0);return 0;
}
  1. 高斯滤波
#include <opencv2/opencv.hpp>int main() {cv::Mat inputImage = cv::imread("input.jpg");cv::Mat smoothedImage;// 应用高斯滤波cv::GaussianBlur(inputImage, smoothedImage, cv::Size(5, 5), 0);cv::imshow("原始图像", inputImage);cv::imshow("高斯滤波后的图像", smoothedImage);cv::waitKey(0);return 0;
}
  1. 中值滤波
#include <opencv2/opencv.hpp>int main() {cv::Mat inputImage = cv::imread("input.jpg");cv::Mat smoothedImage;// 应用中值滤波cv::medianBlur(inputImage, smoothedImage, 5);cv::imshow("原始图像", inputImage);cv::imshow("中值滤波后的图像", smoothedImage);cv::waitKey(0);return 0;
}
  1. 边缘保留滤波
#include <opencv2/opencv.hpp>int main() {cv::Mat inputImage = cv::imread("input.jpg");cv::Mat smoothedImage;// 创建一个导向滤波的导向图像cv::Mat guideImage;cv::cvtColor(inputImage, guideImage, cv::COLOR_BGR2GRAY);// 应用导向滤波cv::ximgproc::guidedFilter(guideImage, inputImage, smoothedImage, 10, 0.1);cv::imshow("原始图像", inputImage);cv::imshow("边缘保留滤波后的图像", smoothedImage);cv::waitKey(0);return 0;
}

请注意,示例中的图像处理函数和参数值可能需要根据你的具体应用和图像特性进行调整。确保你的OpenCV库已正确配置和链接到你的项目,以便编译和运行这些示例代码。

http://www.lryc.cn/news/214114.html

相关文章:

  • 【MySQL索引与优化篇】数据库设计实操(含ER模型)
  • OpenCV—自动驾驶实时道路车道检测(完整代码)
  • PostGIS轨迹分析——简化轨迹
  • 量化交易-应对市场闪崩
  • 在Vue3+ElementPlus项目中使用具有懒加载的el-tree树形控件
  • 高浓度工业废水处理设备有哪些
  • linux上传mysql数据库
  • easyexcel根据模板导出Excel文件,表格自动填充问题
  • golang调用智能合约,获取合约函数的返回值
  • Django3框架-(3)-[使用websocket]:使用channels实现websocket功能;简化的配置和实际使用方式
  • java-工具类抛异常
  • Navicat连接postgresql数据库 -->华为云服务器
  • Leetcode2086. 从房屋收集雨水需要的最少水桶数
  • Pandas教程(非常详细)(第一部分)
  • typing.Union` 标注一多种变量类型
  • OSPF高级特性
  • mysql中日期的加减 date_add()、date_sub() 函数
  • 实在智能携手品牌商家,在活动会面中共谋发展
  • EXSi系统安装与使用
  • Spring MVC (Next-1)
  • 双目视觉检测 KX02-SY1000型测宽仪 有效修正和消除距离变化对测量的影响
  • C++ 面向对象 学习 优秀教程
  • Python笔记——pyChram连接linux子系统,使用linux下的Python进行编译
  • 【数据结构】数组和字符串(七):特殊矩阵的压缩存储:三元组表的转置、加法、乘法操作
  • Spring底层原理(四)
  • Android 14 rook替代Postern进行中间人抓包
  • [rancher] rancher部署和使用的一些思考
  • 迅镭激光董事长颜章健荣膺“2023年如皋市科技强企人物”!
  • 专业医学病例翻译公司推荐
  • 英飞凌TC3xx-Overlay