calm740 2022-03-11 10:51 采纳率: 50%
浏览 44
已结题

二值地图距离求取问题和算法

img


题遇到的现象和发生背景

问题相关代码,请勿粘贴截图

img

彩图是原图,已知其长宽大小(距离),二值图由彩图转化过来,如何在二值图确定平面点点之间距离大小

  • 写回答

3条回答 默认 最新

  • reach_creater 2022-03-11 11:54
    关注

    1.阈值分割
    2.断开未连接区域
    3.遍历区域并提取区域中心
    4.数学公式计算点到点距离

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • ilmss 2022-03-14 17:29
    关注
    
    function [ point1,point2,dis ] = Mindistance( F1,F2 )
    %此函数为计算两组坐标点之间的最近距离并找出距离最近的一对坐标点
    %输入分别为两组坐标点的二维数组,必须是n行两列
    max_x1=max(F1(:,1));max_x2=max(F2(:,1));
    max_y1=max(F1(:,2));max_y2=max(F2(:,2));
    max_x=max(max_x1,max_x2);
    max_y=max(max_y1,max_y2);
    img1_1=zeros(max_x,max_y);%建立一个二值图像使两数组中的点都可以出现在该图中
    img2_1=img1_1;
    %让数组F1,F2中的坐标点各自显现在两个二值图像中
    for i0=1:length(F1(:,1))
    img1_1(F1(i0,1),F1(i0,2))=1;
    end
    for i1=1:length(F2(:,1))
    img2_1(F2(i1,1),F2(i1,2))=1;
    end
    
    [img1_2,dix] = bwdist(img1_1);%dix反映img1_1每个黑点对应的最近的白点的索引下标
    img2_2=img2_1.*img1_2;%img2_2中不为0的点表示img2_1中该点到img1_1中点的最近距离
    dis=min(img2_2(img2_2~=0));%找到两个数组中的点的最近距离
    [x1,y1]=find(img2_2==dis);%找出F2中距离F1最近的点的坐标
    L=length(x1);
    point1=[L,2];
    point2=cat(2,x1,y1);%设置point1,point2数组,记录两组坐标点中距离最近的点的坐标
    
    for i=1:L
    num=dix(x1(i),y1(i));
    [x,y]=ind2sub([max_x,max_y], num); %来完成下标到索引值的转换。
    point1(i,1)=x;
    point1(i,2)=y;
    end
    
    end
    
    主程序:
    clc
    img1=zeros(20,20);%首先生成一个20×20像素的二值图像
    for i=8:15
    for j=8:i
    img1(i,j)=1;
    end
    end
    img1(16,9)=1;
    img1(17,9)=1;
    img1(18,9)=1;
    img1(18,10)=1;%在二值图像中随意设计一个多边形区域
    [x1,y1]=find(img1==1);
    f1=cat(2,x1,y1);
    %再生成衣服同样大小的二值图像,里面同样包含一个二值多边形区域
    img2=zeros(20,20);
    img2(2,1)=1;
    img2(2,2)=1;
    img2(3,1)=1;
    img2(3,2)=1;
    img2(3,3)=1;
    [x2,y2]=find(img2==1);
    f2=cat(2,x2,y2);
    [ point1,point2,dis ] = Mindistance( f1,f2 );%调用函数计算两个多边形的最小距离
    figure(1)
    imshow(img1|img2)%在一幅画面中显示两个多边形
    hold on
    plot(point1(:,2),point1(:,1),'')
    plot(point2(:,2),point2(:,1),'')
    tip=mean(cat(1,point1,point2));
    text(tip(2),tip(1),num2str(dis),'color','b','FontSize',12,'HorizontalAlignment','center');%标记距离
    
    评论
  • 卡尔曼的BD SLAMer 计算机视觉领域新星创作者 2022-03-11 11:24
    关注

    method 1:
    提取其坐标值X1,Y1,X2,Y2,则距离为sqrt((X1-X2)^2 + (Y1 -Y2)^2)
    method 2:
    function [ point1,point2,dis ] = Mindistance( F1,F2 )
    %此函数为计算两组坐标点之间的最近距离并找出距离最近的一对坐标点
    %输入分别为两组坐标点的二维数组,必须是n行两列
    max_x1=max(F1(:,1));max_x2=max(F2(:,1));
    max_y1=max(F1(:,2));max_y2=max(F2(:,2));
    max_x=max(max_x1,max_x2);
    max_y=max(max_y1,max_y2);
    img1_1=zeros(max_x,max_y);%建立一个二值图像使两数组中的点都可以出现在该图中
    img2_1=img1_1;
    %让数组F1,F2中的坐标点各自显现在两个二值图像中
    for i0=1:length(F1(:,1))
    img1_1(F1(i0,1),F1(i0,2))=1;
    end
    for i1=1:length(F2(:,1))
    img2_1(F2(i1,1),F2(i1,2))=1;
    end

    [img1_2,dix] = bwdist(img1_1);%dix反映img1_1每个黑点对应的最近的白点的索引下标
    img2_2=img2_1.*img1_2;%img2_2中不为0的点表示img2_1中该点到img1_1中点的最近距离
    dis=min(img2_2(img2_2~=0));%找到两个数组中的点的最近距离
    [x1,y1]=find(img2_2==dis);%找出F2中距离F1最近的点的坐标
    L=length(x1);
    point1=[L,2];
    point2=cat(2,x1,y1);%设置point1,point2数组,记录两组坐标点中距离最近的点的坐标

    for i=1:L
    num=dix(x1(i),y1(i));
    [x,y]=ind2sub([max_x,max_y], num); %来完成下标到索引值的转换。
    point1(i,1)=x;
    point1(i,2)=y;
    end

    end

    主程序:
    clc
    img1=zeros(20,20);%首先生成一个20×20像素的二值图像
    for i=8:15
    for j=8:i
    img1(i,j)=1;
    end
    end
    img1(16,9)=1;
    img1(17,9)=1;
    img1(18,9)=1;
    img1(18,10)=1;%在二值图像中随意设计一个多边形区域
    [x1,y1]=find(img1==1);
    f1=cat(2,x1,y1);
    %再生成衣服同样大小的二值图像,里面同样包含一个二值多边形区域
    img2=zeros(20,20);
    img2(2,1)=1;
    img2(2,2)=1;
    img2(3,1)=1;
    img2(3,2)=1;
    img2(3,3)=1;
    [x2,y2]=find(img2==1);
    f2=cat(2,x2,y2);
    [ point1,point2,dis ] = Mindistance( f1,f2 );%调用函数计算两个多边形的最小距离
    figure(1)
    imshow(img1|img2)%在一幅画面中显示两个多边形
    hold on
    plot(point1(:,2),point1(:,1),'')
    plot(point2(:,2),point2(:,1),'
    ')
    tip=mean(cat(1,point1,point2));
    text(tip(2),tip(1),num2str(dis),'color','b','FontSize',12,'HorizontalAlignment','center');%标记距离
    hold off

    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月11日

悬赏问题

  • ¥15 网络打印机Ip地址自动获取出现问题
  • ¥15 求局部放电案例库,用于预测局部放电类型
  • ¥100 QT Open62541
  • ¥15 stata合并季度数据和日度数据
  • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
  • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?
  • ¥15 用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色
  • ¥50 监控摄像头 乐橙和家亲版 保存sd卡的文件怎么打开?视频怎么播放?
  • ¥15 Python的Py-QT扩展库开发GUI
  • ¥60 提问一下周期性信信号的问题