MATLAB 自定义中值滤波(54)

71 篇文章 140 订阅 ¥19.90 ¥99.00

MATLAB 自定义中值滤波(54)

一、算法介绍

中值滤波,是一种常见的点云平滑算法,改善原始点云的数据质量问题,MATLAB自带的工具似乎不太友好,这里提供自定义实现的点云中值滤波算法,具体效果如下所示:

中值滤波前:
在这里插入图片描述
中值滤波后:
在这里插入图片描述

二、算法实现

1.原理

首先读取原始点云数据,并构建kd树以加速最近邻搜索。然后定义窗口大小,对每个点使用kd树查找其最近邻点索引,然后计算这些邻域点的中值作为该点的新坐标。最后将平滑后的点云数据保存为PLY文件。

2.代码

% 读取原始点云数据
rawData = pcread('CSDN.ply'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
中值滤波是一种常用的图像去噪方法,可以使用 MATLAB 的 medfilt2 函数进行实现。以下是一个自定义中值滤波函数,其功能与 medfilt2 函数相同。 ```matlab function output = mymedfilt2(input, window_size) % 输入参数: % input: 输入图像 % window_size: 滤波窗口大小 % 输出参数: % output: 滤波后的图像 % 将窗口大小转换为奇数 window_size = max(window_size, 3); % 窗口大小至少为 3 window_size = window_size + mod(window_size, 2) - 1; % 窗口大小为奇数 half_size = floor(window_size/2); % 对输入图像进行补边 input = padarray(input, [half_size, half_size], 'symmetric', 'both'); % 初始化输出图像 output = zeros(size(input)); % 对每个像素进行中值滤波 for i = 1 + half_size : size(input, 1) - half_size for j = 1 + half_size : size(input, 2) - half_size % 提取窗口内的像素值 window = input(i-half_size:i+half_size, j-half_size:j+half_size); % 对窗口内的像素值进行排序 window_sorted = sort(window(:)); % 取间值作为该像素的滤波结果 output(i, j) = window_sorted(median(1:numel(window_sorted))); end end % 去除补边 output = output(1+half_size:end-half_size, 1+half_size:end-half_size); end ``` 在使用时,可以按照以下方式调用该函数: ```matlab input = imread('lena.png'); output = mymedfilt2(input, 5); % 使用窗口大小为 5 的中值滤波 imshow(output); ``` 其,输入参数 input 是需要进行滤波的图像,window_size 是滤波窗口大小。函数会返回滤波后的图像 output。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云学徒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值