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

轮廓平滑方法

目录

1. 形态学操作

2. 边缘平滑化

3. 轮廓近似

python 有回归线平滑 2D 轮廓


1. 形态学操作

利用形态学操作(例如腐蚀、膨胀、开运算、闭运算等)可以使分割边界更加平滑和连续。腐蚀可以消除小的不连续区域,膨胀可以填充空洞,而开运算可以平滑边界并保留边缘信息,闭运算则可以填充小的孔洞。

import cv2
import numpy as np# 读取语义分割结果
segmentation_result = cv2.imread('segmentation_result.png', 0)  # 读取单通道图像# 形态学操作
kernel = np.ones((5,5), np.uint8)
smoothed_result = cv2.morphologyEx(segmentation_result, cv2.MORPH_CLOSE, kernel)

2. 边缘平滑化

在分割边界上应用边缘平滑化算法(如高斯滤波、均值滤波、中值滤波等)可以减少噪声并使得边界更加平滑。

 

python  code

smoothed_result = cv2.GaussianBlur(segmentation_result, (5, 5), 0)

3. 轮廓近似

利用轮廓近似算法(如Douglas-Peucker算法)可以对边界轮廓进行抽稀,从而使得轮廓更加平滑。

contours, _ = cv2.findContours(segmentation_result, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)epsilon = 0.02 * cv2.arcLength(contours[0], True)
approx = cv2.approxPolyDP(contours[0], epsilon, True)
smoothed_result = np.zeros_like(segmentation_result)
cv2.drawContours(smoothed_result, [approx], -1, 255, thickness=cv2.FILLED)

python 有回归线平滑 2D 轮廓

import cv2
import numpy as np
from scipy.interpolate import splprep, splev
import matplotlib.pyplot as plt# 假设有一组轮廓点坐标
x = np.array([10, 20, 30, 40, 50])
y = np.array([5, 15, 10, 25, 20])# 多项式拟合
tck, _ = splprep([x, y], s=0)  # s 参数控制拟合平滑度# 生成新的平滑轮廓点
new_points = splev(np.linspace(0, 1, 100), tck)# 创建一张空白图像
image = np.zeros((100, 100), dtype=np.uint8)# 将平滑后的轮廓点转换为整数坐标,并绘制在图像上
smoothed_contour = np.array(new_points, dtype=np.int32).T.reshape((-1, 1, 2))
cv2.polylines(image, [smoothed_contour], isClosed=False, color=255, thickness=1)# 将图像转换为RGB格式以供Matplotlib显示
image_rgb = cv2.cvtColor(image, cv2.COLOR_GRAY2RGB)

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

相关文章:

  • 十大VSCODE 插件推荐2023
  • HBase 集群搭建
  • 大三了,C++还算可以从事什么岗位比较好?
  • java 贪吃蛇游戏
  • 聊聊Java算法的时间复杂度
  • hive中array相关函数总结
  • 年终盘点文生图的狂飙之路,2023年文生图卷到什么程度了?
  • C++:list增删查改模拟实现
  • 基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道
  • ubuntu 18.04 共享屏幕
  • 第十三节TypeScript 元组
  • 基于Java (spring-boot)的仓库管理系统
  • SQL面试题挑战06:互相关注的人
  • LSTM和GRU的区别
  • 算法基础之数字三角形
  • 蓝桥杯宝藏排序题目算法(冒泡、选择、插入)
  • 如何使用Docker部署Dashy并无公网ip远程访问管理界面
  • 【接口测试】如何定位BUG的产生原因
  • JavaScript 中的短路求值(if语句简洁写法--逻辑运算符||和的高级用法)
  • 普本毕业,还有逆风翻盘的机会吗?
  • spark:RDD编程(Python版)
  • 中国元宇宙论坛暨常孝元宇宙发布会即将在京举行
  • 华为认证 | 云计算方向HCIE有效期多久?实验报名费多少?
  • 动物分类识别教程+分类释义+界面展示
  • 【Java动态代理如何实现】
  • 数据库(部分函数)
  • 基于Vite+Vue3 给项目引入Axios
  • 为什么查企业的时候有的公司没有显示注册资金?
  • DataProcess-VOC数据图像和标签一起进行Resize
  • MultiValueMap