本文提供了一个模拟环境,模拟激光束打到物体表面上的点及地面点。可以设置激光范围、分辨率、物体位置、大小及旋转

近期需要分析激光扫描仪的遮挡区域。没找到合适的环境,自己用Matlab写了一个

原理不难,但细节的东西挺多,本以为一天能搞完结果调了三天

秉持能用就不改的原则,没仔细测试,肯定有小bug,比如得先加载距离近的物体、激光发射源不能在物体内部等

主程序 Environment_Main.m

clc;clear;
% 基本参数设置部分----------------------------------------------------------
% 扫描仪参数设置
LiDAR.Location = [0 0 1200]; % 激光扫描仪坐标原点
LiDAR.Rotation = [0 0 0]; % RPY旋转角
stepH = 1; stepV =1; %stepH:俯仰步进角 stepV:水平步进角
% 屋子参数设置
roomX = 8000;
roomY = 6000;
roomZ = 4000;
% 绘图设置------------------------------------------------------------------
axis equal;
axis([-roomX/2,roomX/2,-roomY/2,roomY/2,0,roomZ]);
hold on; grid on;
xlabel('x');ylabel('y');zlabel('z');% 主程序--------------------------------------------------------------------
% 生成激光束
LiDAR.laserCount = 0; % 生成的激光束计数
laserPoints = zeros((360/stepH)*(360/stepV),3); % 初始化
for a = -90:stepH:68 % 俯仰角for b = -180:stepV:180LiDAR.laserCount = LiDAR.laserCount+1;c = 0;RA = Base_RotateMatrix(a,b,c);laser_point = RA * [100 0 0]';laserPoints(LiDAR.laserCount,:) = laser_point';end
endLiDAR.Directions = laserPoints(1:LiDAR.laserCount,:); % 存放激光射线方向向量
LiDAR.Directions = (Base_RotateMatrix(LiDAR.Rotation(1),LiDAR.Rotation(2),LiDAR.Rotation(3))*LiDAR.Directions')';
LiDAR.Flag = ones(LiDAR.laserCount,1); % 用来标记哪些射线已经射到物体上
LiDAR.Lasers = LiDAR.Directions+LiDAR.Location; % 激光射线
% scatter3(LiDAR.Lasers(:,1),LiDAR.Lasers(:,2),LiDAR.Lasers(:,3),'.');% ***在这里添加物体***-----------------------------------------------------
% 立方体-------------------------------------------------------------------
cube.scale = [500,500,2800];                         % 立方体大小
cube.Location = [1000 0 cube.scale(3)/2];           % 立方体位置
cube.Rotation = [0 0 0];                            % 立方体旋转量
cube_output = Environment_Driver_Box_Create(cube);  % 生成立方体顶点坐标(用于显示)、平面参数(用于检测光)
Environment_Driver_Box_Screen(cube_output);         % 将立方体显示在图像中
LiDAR.Flag = Environment_Driver_Cube_Line(LiDAR,cube_output);    % 计算射线和立方体的交点
% 立方体-------------------------------------------------------------------
cube.scale = [500,500,500];                         % 立方体大小
cube.Location = [-1200 0 cube.scale(3)/2];           % 立方体位置
cube.Rotation = [0 0 45];                            % 立方体旋转量
cube_output = Environment_Driver_Box_Create(cube);  % 生成立方体顶点坐标(用于显示)、平面参数(用于检测光)
Environment_Driver_Box_Screen(cube_output);         % 将立方体显示在图像中
LiDAR.Flag = Environment_Driver_Cube_Line(LiDAR,cube_output);    % 计算射线和立方体的交点
% 立方体-------------------------------------------------------------------
cube.scale = [500,500,1200];                         % 立方体大小
cube.Location = [-2200 0 cube.scale(3)/2];           % 立方体位置
cube.Rotation = [0 0 0];                            % 立方体旋转量
cube_output = Environment_Driver_Box_Create(cube);  % 生成立方体顶点坐标(用于显示)、平面参数(用于检测光)
Environment_Driver_Box_Screen(cube_output);         % 将立方体显示在图像中
LiDAR.Flag = Environment_Driver_Cube_Line(LiDAR,cube_output);    % 计算射线和立方体的交点
% 立方体-------------------------------------------------------------------
cube.scale = [500,500,1200];                         % 立方体大小
cube.Location = [1200 -2000 cube.scale(3)/2];           % 立方体位置
cube.Rotation = [0 0 0];                            % 立方体旋转量
cube_output = Environment_Driver_Box_Create(cube);  % 生成立方体顶点坐标(用于显示)、平面参数(用于检测光)
Environment_Driver_Box_Screen(cube_output);         % 将立方体显示在图像中
LiDAR.Flag = Environment_Driver_Cube_Line(LiDAR,cube_output);    % 计算射线和立方体的交点
% 立方体-------------------------------------------------------------------
cube.scale = [500,500,1200];                         % 立方体大小
cube.Location = [-1200 2000 cube.scale(3)/2];           % 立方体位置
cube.Rotation = [0 0 0];                            % 立方体旋转量
cube_output = Environment_Driver_Box_Create(cube);  % 生成立方体顶点坐标(用于显示)、平面参数(用于检测光)
Environment_Driver_Box_Screen(cube_output);         % 将立方体显示在图像中
LiDAR.Flag = Environment_Driver_Cube_Line(LiDAR,cube_output);    % 计算射线和立方体的交点
% 立方体-------------------------------------------------------------------
cube.scale = [500,500,1200];                         % 立方体大小
cube.Location = [-1200 -2000 cube.scale(3)/2];           % 立方体位置
cube.Rotation = [0 0 0];                            % 立方体旋转量
cube_output = Environment_Driver_Box_Create(cube);  % 生成立方体顶点坐标(用于显示)、平面参数(用于检测光)
Environment_Driver_Box_Screen(cube_output);         % 将立方体显示在图像中
LiDAR.Flag = Environment_Driver_Cube_Line(LiDAR,cube_output);    % 计算射线和立方体的交点
% 立方体-------------------------------------------------------------------
cube.scale = [500,500,2000];                         % 立方体大小
cube.Location = [0 1500 cube.scale(3)/2];           % 立方体位置
cube.Rotation = [0 0 0];                            % 立方体旋转量
cube_output = Environment_Driver_Box_Create(cube);  % 生成立方体顶点坐标(用于显示)、平面参数(用于检测光)
Environment_Driver_Box_Screen(cube_output);         % 将立方体显示在图像中
LiDAR.Flag = Environment_Driver_Cube_Line(LiDAR,cube_output);    % 计算射线和立方体的交点% 和屋子墙壁的交点----------------------------------------------------------
cube.scale = [roomX,roomY,roomZ];
cube.Location = [0 0 roomZ/2];
cube.Rotation = [0 0 0];
cube_output = Environment_Driver_Box_Create(cube);  % 生成立方体顶点坐标(用于显示)、平面参数(用于检测光)
LiDAR.Flag = Environment_Driver_Room_Line(LiDAR,cube_output);    % 计算射线和立方体的交点
hold on;
fill3([-roomX/2,roomX/2,roomX/2,-roomX/2],[roomY/2,roomY/2,-roomY/2,-roomY/2],[0,0,0,0],[1 1 1]);% 地面上色
fill3([-roomX/2,roomX/2,roomX/2,-roomX/2],[roomY/2,roomY/2,roomY/2,roomY/2],[roomZ,roomZ,0,0],[1 1 1]);% 前墙面上色
fill3([roomX/2,roomX/2,roomX/2,roomX/2],[-roomY/2,roomY/2,roomY/2,-roomY/2],[roomZ,roomZ,0,0],[1 1 1]);% 右墙面上色%--------------------------------------------------------------------------
scatter3(LiDAR.Location(1),LiDAR.Location(2),LiDAR.Location(3),200,'.');

函数-创建立方体 Environment_Driver_Box_Create.m

% 根据位置设定、旋转关系,创建立方体及需要的其它参数
function output = Environment_Driver_Box_Create(input)% 8个交点的坐标%      E ———  F %     /        / | %    /       /   | %   A ——— B   G %   |  /H    |  / %   | /      | / %   D ————C Point = zeros(6,3);Point(1,:) = [input.scale(1)/2  -input.scale(2)/2  input.scale(3)/2];   % 点APoint(2,:) = [input.scale(1)/2   input.scale(2)/2  input.scale(3)/2];   % 点BPoint(3,:) = [input.scale(1)/2 input.scale(2)/2   -input.scale(3)/2];   % 点CPoint(4,:) = [input.scale(1)/2 -input.scale(2)/2  -input.scale(3)/2];   % 点DPoint(5,:) = [-input.scale(1)/2 -input.scale(2)/2  input.scale(3)/2];   % 点EPoint(6,:) = [-input.scale(1)/2 input.scale(2)/2   input.scale(3)/2];   % 点FPoint(7,:) = [-input.scale(1)/2 input.scale(2)/2  -input.scale(3)/2];   % 点GPoint(8,:) = [-input.scale(1)/2 -input.scale(2)/2 -input.scale(3)/2];   % 点H% 根据输入进行旋转a = input.Rotation(2);b = input.Rotation(3);c = input.Rotation(1);% RPY旋转矩阵RA(1,1) = cosd(a)*cosd(b);  RA(2,1) = cosd(a)*sind(b);  RA(3,1) = -sind(a);RA(1,2) = sind(c)*sind(a)*cosd(b)-cosd(c)*sind(b);RA(2,2) = sind(c)*sind(a)*sind(b)+cosd(c)*cosd(b);RA(3,2) = sind(c)*cosd(a);RA(1,3) = cosd(c)*sind(a)*cosd(b)+sind(c)*sind(b);RA(2,3) = cosd(c)*sind(a)*sind(b)-sind(c)*cosd(b);RA(3,3) = cosd(c)*cosd(a);% 根据旋转矩阵和位置关系对立方体坐标变换Point = RA * Point'+input.Location';output.point = zeros(3,8);output.point = Point;Point = Point';output.plane(1,:) = Environment_Driver_Plane_Matching(Point([1 2 3 4],:)); % ABCD面 *因为要计算法线方向,这个顺序不能打乱output.plane(2,:) = Environment_Driver_Plane_Matching(Point([6 2 1 5],:)); % FBAE面 *因为要计算法线方向,这个顺序不能打乱output.plane(3,:) = Environment_Driver_Plane_Matching(Point([3 2 6 7],:)); % CBFG面 *因为要计算法线方向,这个顺序不能打乱output.plane(4,:) = Environment_Driver_Plane_Matching(Point([8 4 3 7],:)); % HDCG面 *因为要计算法线方向,这个顺序不能打乱output.plane(5,:) = Environment_Driver_Plane_Matching(Point([8 7 6 5],:)); % HGFE面 *因为要计算法线方向,这个顺序不能打乱output.plane(6,:) = Environment_Driver_Plane_Matching(Point([1 4 8 5],:)); % ADHE面 *因为要计算法线方向,这个顺序不能打乱output.line(1,:) = horzcat(Point(1,:),Point(2,:),Point(3,:),Point(4,:)); % ABCD面的四个坐标,后面获取直线方程output.line(2,:) = horzcat(Point(6,:),Point(2,:),Point(1,:),Point(5,:)); % FBAE面的四个坐标,后面获取直线方程output.line(3,:) = horzcat(Point(3,:),Point(2,:),Point(6,:),Point(7,:)); % CBFG面的四个坐标,后面获取直线方程output.line(4,:) = horzcat(Point(8,:),Point(4,:),Point(3,:),Point(7,:)); % HDCG面的四个坐标,后面获取直线方程output.line(5,:) = horzcat(Point(8,:),Point(7,:),Point(6,:),Point(5,:)); % HGFE面的四个坐标,后面获取直线方程output.line(6,:) = horzcat(Point(1,:),Point(4,:),Point(8,:),Point(5,:)); % ADHE面的四个坐标,后面获取直线方程output.centerPoint(1,:) = (Point(1,:)+Point(2,:)+Point(3,:)+Point(4,:))/4; % ABCD面的中心点output.centerPoint(2,:) = (Point(6,:)+Point(2,:)+Point(1,:)+Point(5,:))/4; % FBAE面的中心点output.centerPoint(3,:) = (Point(3,:)+Point(2,:)+Point(6,:)+Point(7,:))/4; % CBFG面的中心点output.centerPoint(4,:) = (Point(8,:)+Point(4,:)+Point(3,:)+Point(7,:))/4; % HDCG面的中心点output.centerPoint(5,:) = (Point(8,:)+Point(7,:)+Point(6,:)+Point(5,:))/4; % HGFE面的中心点output.centerPoint(6,:) = (Point(1,:)+Point(4,:)+Point(8,:)+Point(5,:))/4; % ADHE面的中心点end

函数-显示立方体 Environment_Driver_Box_Screen.m

% 根据输入的立方体8个点来显示在屏幕中
function Environment_Driver_Box_Screen(input)local.point = input.point;fillcolor= 1;hold on;fill3(local.point(1,[1 2 3 4]),local.point(2,[1 2 3 4]),local.point(3,[1 2 3 4]),fillcolor);fill3(local.point(1,[1 4 8 5]),local.point(2,[1 4 8 5]),local.point(3,[1 4 8 5]),fillcolor);fill3(local.point(1,[8 7 6 5]),local.point(2,[8 7 6 5]),local.point(3,[8 7 6 5]),fillcolor);fill3(local.point(1,[6 7 3 2]),local.point(2,[6 7 3 2]),local.point(3,[6 7 3 2]),fillcolor);fill3(local.point(1,[1 2 6 5]),local.point(2,[1 2 6 5]),local.point(3,[1 2 6 5]),fillcolor);fill3(local.point(1,[3 4 8 7]),local.point(2,[3 4 8 7]),local.point(3,[3 4 8 7]),fillcolor);end

函数-立方体平面拟合 Environment_Driver_Plane_Matching.m

% 输入四个点,计算该立方体平面参数
function output = Environment_Driver_Plane_Matching(input)% B(p1)  /\   /| G(p2)%        |   /%        | /%        C ————>pp1 = input(2,:)-input(1,:);p2 = input(2,:)-input(3,:);p = cross(p1,p2);p = p/norm(p);output(1,1:3) = p';output(1,4) = -input(1,:)*p';
end

函数-立方体与射线交点 Environment_Driver_Cube_Line.m

原理就是遍历所有射线和立方体六个平面的交点,并保留平面内的点。已经打到物体上的射线会被标记。那些没被标记的射线将和下一个物体找交点。

% 本函数用来计算射线和一个正方体的所有表面交点
function output = Environment_Driver_Cube_Line(LiDAR,cube)% 初始化----------------------------------------------------------------InitialPoint = zeros(5000,3); % 初始化矩阵,用来存放所有交点PointCount = 0; % 交点计数hold on;% 遍历所有激光射线------------------------------------------------------for i=1:1:LiDAR.laserCountif(LiDAR.Flag(i) == 0) % 该射线已经打到别的物体上,则不考虑该射线continue;endlaserDistance = 100000; % 只留表面点savePoint = [0 0 0];saveFlag = 0;% 当前激光束打在六个平面上的点的坐标---------------------------------for j=1:1:6 % 防止射线从相反的方向与平面相交---------------------------------refLine = cube.centerPoint(j,:) - LiDAR.Location; % 从雷达原点到平面中点的向量sigma = acos(dot(refLine,LiDAR.Directions(i,:))/(norm(refLine)*norm(LiDAR.Directions(i,:))));if(sigma*180/pi>=90) continue;end% 计算与该平面的交点--------------------------------------------n1 = abs(cube.plane(j,1:3)*LiDAR.Directions(i,:)');n2 = abs(cube.plane(j,1:3)*LiDAR.Location'+cube.plane(j,4));n = n1/n2;if(n==0)continue;endlocalPoint = LiDAR.Location+LiDAR.Directions(i,:)/n;% 判断交点是否在平面内------------------------------------------% 获取平面的长和宽,求该点和四条边的距离。该距离必须小于长和宽----L1 = int32(norm(cube.line(j,1:3) - cube.line(j,4:6)));L2 = int32(norm(cube.line(j,4:6) - cube.line(j,7:9)));d1 = norm(cross(localPoint-cube.line(j,1:3),localPoint-cube.line(j,4:6)))/norm(cube.line(j,4:6)-cube.line(j,1:3));d2 = norm(cross(localPoint-cube.line(j,4:6),localPoint-cube.line(j,7:9)))/norm(cube.line(j,4:6)-cube.line(j,7:9));d3 = norm(cross(localPoint-cube.line(j,7:9),localPoint-cube.line(j,10:12)))/norm(cube.line(j,7:9)-cube.line(j,10:12));d4 = norm(cross(localPoint-cube.line(j,10:12),localPoint-cube.line(j,1:3)))/norm(cube.line(j,10:12)-cube.line(j,1:3));if(d1>L2||d3>L2||d2>L1||d4>L1)continue;end% 判断点是否在平面上(不判断有时候会出BUG)----------------------if(abs(cube.plane(j,1:3)*localPoint'+cube.plane(j,4))>5)continue;end% 一条线与立方体相交会有两个点,只保留距离近的表面点--------------localPointDistance = norm(localPoint-LiDAR.Location);if(localPointDistance<laserDistance) laserDistance = localPointDistance;savePoint = localPoint;saveFlag = 1;end% 调试用-------------------------------------------------------
%             scatter3((LiDAR.Location(1)+LiDAR.Directions(i,1)),(LiDAR.Location(2)+LiDAR.Directions(i,2)),(LiDAR.Location(3)+LiDAR.Directions(i,3)),'.');
%             scatter3(localPoint(1),localPoint(2),localPoint(3),'.');end% 保存所有满足要求的点到矩阵中---------------------------------------if(saveFlag == 1)PointCount = PointCount+1;InitialPoint(PointCount,:) = savePoint;LiDAR.Flag(i) = 0;endend% 绘图-----------------------------------------------------------------scatter3(InitialPoint(:,1),InitialPoint(:,2),InitialPoint(:,3),'r','.');% 返回已经打到物体上的射线----------------------------------------------output = LiDAR.Flag;
end

函数-屋子墙壁与射线交点 Environment_Driver_Room_Line.m

% 本函数用来计算射线和屋子的特定表面交点
function output = Environment_Driver_Room_Line(LiDAR,cube)% 初始化----------------------------------------------------------------InitialPoint = zeros(5000,3); % 初始化矩阵,用来存放所有交点PointCount = 0; % 交点计数hold on;% 遍历所有激光射线------------------------------------------------------for i=1:1:LiDAR.laserCountif(LiDAR.Flag(i) == 0) % 该射线已经打到别的物体上,则不考虑该射线continue;endlaserDistance = 100000; % 只留表面点savePoint = [0 0 0];saveFlag = 0;% 当前激光束打在六个平面上的点的坐标---------------------------------for j=1:1:6% ***和“立方体与射线交点”唯一区别在于筛选了只与三个平面计算交点****************if(j==2||j==5||j==6)% 1:右墙面 2:房顶  3:前墙面 4:地面 5:左墙面 6:后墙面continue;end% ***其余全部一样 ***********************************************************% 防止射线从相反的方向与平面相交---------------------------------refLine = cube.centerPoint(j,:) - LiDAR.Location; % 从雷达原点到平面中点的向量sigma = acos(dot(refLine,LiDAR.Directions(i,:))/(norm(refLine)*norm(LiDAR.Directions(i,:))));if(sigma*180/pi>=90) continue;end% 计算与该平面的交点--------------------------------------------n1 = abs(cube.plane(j,1:3)*LiDAR.Directions(i,:)');n2 = abs(cube.plane(j,1:3)*LiDAR.Location'+cube.plane(j,4));n = n1/n2;if(n==0)continue;endlocalPoint = LiDAR.Location+LiDAR.Directions(i,:)/n;% 判断交点是否在平面内------------------------------------------% 获取平面的长和宽,求该点和四条边的距离。该距离必须小于长和宽----L1 = int32(norm(cube.line(j,1:3) - cube.line(j,4:6)));L2 = int32(norm(cube.line(j,4:6) - cube.line(j,7:9)));d1 = norm(cross(localPoint-cube.line(j,1:3),localPoint-cube.line(j,4:6)))/norm(cube.line(j,4:6)-cube.line(j,1:3));d2 = norm(cross(localPoint-cube.line(j,4:6),localPoint-cube.line(j,7:9)))/norm(cube.line(j,4:6)-cube.line(j,7:9));d3 = norm(cross(localPoint-cube.line(j,7:9),localPoint-cube.line(j,10:12)))/norm(cube.line(j,7:9)-cube.line(j,10:12));d4 = norm(cross(localPoint-cube.line(j,10:12),localPoint-cube.line(j,1:3)))/norm(cube.line(j,10:12)-cube.line(j,1:3));if(d1>L2||d3>L2||d2>L1||d4>L1)continue;end% 判断点是否在平面上(不判断有时候会出BUG)----------------------if(abs(cube.plane(j,1:3)*localPoint'+cube.plane(j,4))>5)continue;end% 一条线与立方体相交会有两个点,只保留距离近的表面点--------------localPointDistance = norm(localPoint-LiDAR.Location);if(localPointDistance<laserDistance) laserDistance = localPointDistance;savePoint = localPoint;saveFlag = 1;end% 调试用-------------------------------------------------------
%             scatter3((LiDAR.Location(1)+LiDAR.Directions(i,1)),(LiDAR.Location(2)+LiDAR.Directions(i,2)),(LiDAR.Location(3)+LiDAR.Directions(i,3)),'.');
%             scatter3(localPoint(1),localPoint(2),localPoint(3),'.');end% 保存所有满足要求的点到矩阵中---------------------------------------if(saveFlag == 1)PointCount = PointCount+1;InitialPoint(PointCount,:) = savePoint;LiDAR.Flag(i) = 0;endend% 绘图-----------------------------------------------------------------scatter3(InitialPoint(:,1),InitialPoint(:,2),InitialPoint(:,3),'r','.');% 返回已经打到物体上的射线----------------------------------------------output = LiDAR.Flag;
end

交点公式参考:

求直线与平面的交点
https://blog.csdn.net/smallflyingpig/article/details/51234711

激光扫描三维空间测量点模拟-基于Matlab(含源码)相关推荐

  1. 阴阳师模拟抽卡[含源码]

    实现方式 HTML + JavaScript 实现效果 概率可自行在代码中修改,默认为概率UP 为了好看我加入了鼠标插件,鼠标按住右键不放画图案,仅仅是画图而已 (实际单击右键抽卡) 单击右键进行抽卡 ...

  2. 三维旋转心形图(matlab 含源码及注释)

    一.二维心形线 (1)笛卡尔心形线,分为开口向左.右.上.下的四种.可用极坐标方程画图,在此不做演示.读者感兴趣或需要可自行百度查找. (2)第二种心形线 方程: 实现代码: ezplot('(x^2 ...

  3. 基于Matlab的LDPC码性能研究毕业设计(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 本科毕业设计(论文) 题 目    LDPC码性能研究 摘 要     信道编码是数字通信系统的 ...

  4. 【Matlab数字识别】数字仪表图像识别【含源码 693期】

    一.代码运行视频(哔哩哔哩) [Matlab数字识别]数字仪表图像识别[含源码 693期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLAB ...

  5. 【Matlab图像去噪】小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含源码 462期】

    一.代码运行视频(哔哩哔哩) [Matlab图像去噪]小波滤波(硬阙值+软阙值)+中值滤波图像去噪[含源码 462期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  6. 【Matlab瑕疵检测】阙值瓶盖瑕疵检测【含源码 730期】

    一.代码运行视频(哔哩哔哩) [Matlab瑕疵检测]阙值瓶盖瑕疵检测[含源码 730期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLAB ...

  7. 【Matlab图像拼接】块匹配全景图像拼接【含源码 742期】

    一.代码运行视频(哔哩哔哩) [Matlab图像拼接]块匹配全景图像拼接[含源码 742期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  8. 【Matlab元胞自动机】元胞自动机大型商场人流疏散【含源码 665期】

    一.代码运行视频(哔哩哔哩) [Matlab元胞自动机]元胞自动机大型商场人流疏散[含源码 665期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]贺琳,聂化 ...

  9. 【Matlab图像去噪】改进非局部均值红外图像混合噪声【含源码 1640期】

    一.代码运行视频(哔哩哔哩) [Matlab图像去噪]改进非局部均值红外图像混合噪声[含源码 1640期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 李方 ...

最新文章

  1. 手把手用YOLO做目标检测
  2. 鸿蒙开发者自学,【5月21日鸿蒙公开课】自学鸿蒙 当代大学生的进阶之路
  3. [Python]网络爬虫(四):Opener与Handler的介绍和实例应用
  4. SAP ABAP技能树
  5. mysql数据库的快捷键
  6. 休眠面试问答-最终清单
  7. 工作237:vuex取值
  8. String实例化两种方式的区别
  9. vue webpack压缩代码_webpack不混淆、不压缩指定js文件
  10. Home键的获取监听,安卓4.0后就不能在onkeydown方法中获取了。怎么办。
  11. python综合设计问题_Python 设计和历史的 27 个问题(2)
  12. vue案例todolist备忘录
  13. ***_ha_高可用_链路备份
  14. 十代主板改win7_微星z490主板装win7系统及bios设置教程(支持10代cpu装win7)
  15. 1.3-----Simplify 3D切片软件简单设置
  16. idea退出debug模式_一文搞懂如何在Intellij IDEA中使用Debug,超级详细
  17. 中国经济刺激计划将提振大宗商品
  18. 行走在数据库上的行癫(二)
  19. win10浏览器加载很慢_win10中的浏览器打开网速特别慢是怎么回事_win10浏览器打开慢如何处理...
  20. 【现代信号处理】17 - 基于滤波器组的谱估计

热门文章

  1. 软件智能:aaas系统构成-整合为 三种八卦图及河图洛书的综合运用 之1
  2. 如何利用STP理论实践品牌定位?
  3. 2022-2028全球与中国公共行业微电网市场现状及未来发展趋势
  4. 游戏扫码登录多功能工具箱集合微信小程序源码
  5. 新的ES6语法01—let:使用let关键字声明块范围的变量
  6. 心电信号求qrs点坐标
  7. 华硕桌面计算机图标,台式华硕主板Win10系统添加控制面板到桌面?
  8. asp.net986-高中学科学习论坛系统#毕业设计
  9. 星云Clustar创始人陈凯:攻坚“算力”,让高性能隐私计算成为生产力
  10. 产品更新-镭速Raysync v6.5.8.0版本发布