邻域均值怎么算Matlab,matlab – 计算区域内部或外部的邻域

首先,创建图像

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

%将元素与原始图像相乘.

%对象本身将被清零,非零边界将保留.

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值