一、介绍通过统计滤波、半径滤波和迭代去噪等多层次算法去除点云中的噪声点,包括离群点、孤立点和细小噪声,最后以pcd格式保存二、代码clear; close all; clc; [fileName, pathName] = uigetfile({'*.pcd';'*.ply';'*.txt'}, '选择点云文件'); if isempty(fileName), return; end pc = pcread([pathName, fileName]); fprintf("原始点数: %d\n", pc.Count); % 多层次去噪 resPC = pc; resPC = pcdenoise(resPC, 'NumNeighbors', 20, 'Threshold', 1.5); % 半径滤波 kdtree = KDTreeSearcher(resPC.Location); [~, dists] = knnsearch(kdtree, resPC.Location, 'K', 6); valid = sum(dists(:, 2:end) = 0.1, 2) = 5; resPC = select(resPC, valid); % 迭代去噪 for i = 1:2 resPC = pcdenoise(resPC, 'NumNeighbors', 20, 'Threshold', 1.5 * 0.8^i); end % 最终去噪 resPC = pcdenoise(resPC, 'Threshold', 0.05); fprintf("去噪后点数: %d,移除: %.1f%%\n", resPC.Count,
三维点云去噪
一、介绍通过统计滤波、半径滤波和迭代去噪等多层次算法去除点云中的噪声点,包括离群点、孤立点和细小噪声,最后以pcd格式保存二、代码clear; close all; clc; [fileName, pathName] = uigetfile({'*.pcd';'*.ply';'*.txt'}, '选择点云文件'); if isempty(fileName), return; end pc = pcread([pathName, fileName]); fprintf("原始点数: %d\n", pc.Count); % 多层次去噪 resPC = pc; resPC = pcdenoise(resPC, 'NumNeighbors', 20, 'Threshold', 1.5); % 半径滤波 kdtree = KDTreeSearcher(resPC.Location); [~, dists] = knnsearch(kdtree, resPC.Location, 'K', 6); valid = sum(dists(:, 2:end) = 0.1, 2) = 5; resPC = select(resPC, valid); % 迭代去噪 for i = 1:2 resPC = pcdenoise(resPC, 'NumNeighbors', 20, 'Threshold', 1.5 * 0.8^i); end % 最终去噪 resPC = pcdenoise(resPC, 'Threshold', 0.05); fprintf("去噪后点数: %d,移除: %.1f%%\n", resPC.Count,