计算区域内部或外部的邻域

  发布于 2023-02-13 13:27

我在MATLAB中遇到如下问题:

假设我有一个如下所示的矩阵.我想要做的是计算以黄色给出的像素的平均值.(ans是108) 在此输入图像描述

如果给出的选项在外面,将计算这一点.

另一方面,如果选项是作为内部给出的,那么在图像中执行的操作. 在此输入图像描述

**我想编写一个算法,根据手动设置的选项找出标有零的区域内外的平均值.**

****4邻里**或8邻居**可考虑.我想在MATLAB中计算它.你们能帮助我吗?

1 个回答
  • 首先,创建图像

    FirstImage = [
    108 113 121 129 128 124 117 101
    114 76  60  110 98  74  121 109
    114 62  52  105 85  59  121 116
    110 59  54  104 0   0   0   115
    104 55  54  104 0   0   0   113
    96  48  51  105 0   0   0   113
    94  60  69  115 0   0   0   110
    99  108 122 130 135 0   0   109
    ];
    
    SecondImage = [
    0   0   0   0   0   0
    138 137 137 137 0   0
    138 127 129 135 138 0
    132 97  99  133 135 0
    134 108 110 137 137 0
    141 140 140 140 139 0
    138 138 138 140 0   0
    0   0   0   0   0   0
    ];
    

    %使图像成为二进制并将其反转,使图像中的零为1.
    %这是为了使其兼容bwtraceboundary

    im = FirstImage == 0 ;
    

    %找到符合要求的对象坐标 bwtraceboundary

    objectCoord = find(im); 
    [startRow,startCol]  = ind2sub(size(im),objectCoord(1) );  
    

    %该find()函数逐列扫描矩阵,
    因此我们知道它将从左上角开始并
    逐列地向下工作%.因此,边界的某些部分必须
    位于找到的第一个坐标的东边.这是找到
    %起始坐标的一种方法

    contour = bwtraceboundary(im,[startRow startCol],'E' ); 
    

    %标记轮廓

    contourimage = zeros(size(im));
    contourind = sub2ind(size(contourimage),contour(:,1),contour(:,2))
    contourimage(contourind) = 1;
    
    
    
    contourimage =
    
      0     0     0     0     0     0     0     0
      0     0     0     0     0     0     0     0
      0     0     0     0     0     0     0     0
      0     0     0     0     1     1     1     0
      0     0     0     0     1     0     1     0
      0     0     0     0     1     0     1     0
      0     0     0     0     1     0     1     0
      0     0     0     0     0     1     1     0
    


    %现在,这只会检测对象本身的边界.
    %我们正在寻找最接近边界的非零值.
    %若要获得最接近的非零值,
    %将稀释应用于countour图像,
    然后%将元素与原始图像相乘.
    %计算非零值的平均值


    %进行稀释

    mask = bwmorph(contourimage,'dilate')
    
    mask =
    
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     1     1     1     1     1
     0     0     0     1     1     1     1     1
     0     0     0     1     1     1     1     1
     0     0     0     1     1     1     1     1
     0     0     0     1     1     1     1     1
     0     0     0     1     1     1     1     1
    



    %mask与原始图像相乘,以元素为单位.
    %对象本身将被清零,非零边界将保留.

    A=mask.*FirstImage
    
    A =
    
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0   105    85    59   121   116
     0     0     0   104     0     0     0   115
     0     0     0   104     0     0     0   113
     0     0     0   105     0     0     0   113
     0     0     0   115     0     0     0   110
     0     0     0   130   135     0     0   109
    



    %然后计算平均值

    mean(A(A>0))
    
    ans =
    
    108.6875
    

    2023-02-13 13:29 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有