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

项目背景

使用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;

    }

  2. 高斯滤波

    #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;

    }

  3. 中值滤波

    #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;

    }

  4. 边缘保留滤波

    #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库已正确配置和链接到你的项目,以便编译和运行这些示例代码。

相关推荐
梦想的颜色6 分钟前
【AI科普】什么是计算机视觉:硬核科普,它和大 AI 大模型到底是什么关系
人工智能·深度学习·计算机视觉·多模态·aiagent·#vlm·ai工程实战
hahaha601634 分钟前
HLS高层次综合设计技巧--循环merge和循环split
人工智能·算法·计算机视觉
陈年老古董1 小时前
OpenCV实战:文档扫描与图像风格迁移
人工智能·python·opencv·计算机视觉
AI的探索之旅3 小时前
97 个 OpenCV 实例(十四):图像分割,GrabCut 抠图 + inpaint 去水印
人工智能·opencv·计算机视觉
词却3 小时前
OpenCV入门(五):图像拼接、背景建模、光流估计与DNN风格迁移
opencv
派大_星3 小时前
OpenCV中的文档扫描与DNN图像处理
人工智能·opencv·计算机视觉
QT界面美化性能优化13 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
AndrewHZ20 小时前
图像处理入门020 | 图像二值化:阈值分割基础 —— cv2.threshold 五种类型与自适应阈值铺垫
图像处理·opencv·文档扫描·阈值分割·图像二值化·trackbar·自适应阈值
格林威20 小时前
C# 相机Burst模式图像采集:使用相机内存配合OpenCvSharp和Halcon实现短时间的高速采集的方法
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
AI智图坊21 小时前
甩手图省事的技术原理:如何用“商品锁定”机制解决AI作图的一致性难题
大数据·人工智能·计算机视觉·ai作画·aigc·ai写作