matlab用递归函数统计矩阵内斑块数
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:数学作业 时间:2024/07/30 17:14:23
matlab用递归函数统计矩阵内斑块数
目前,有一个30*30的矩阵,矩阵中的像素只有1~6的数字编码,随机的.现在要统计这个矩阵中的斑块数量.斑块是指连在一起的同一类型的像素.一个单独的像素(四邻域内没有相同元素)算作一个斑块;只按对角线连接的两个或多个像素不算一个斑块,按两个斑块或多个斑块统计,即多个像素组成一个斑块必须在一个像素的四邻域内要有相同元素.需要多追加财富值的可以满足.
老师给出了一个解决方案:首先统计第一行,从第二行开始使用递推函数逐个判断,从第二行开始,每个元素的斑块归属取决于它正上方的和下一个(右边)的元素的情况,而下一个元素的情况又取决于该元素上方的和又下一个元素的情况,如此递推
目前,有一个30*30的矩阵,矩阵中的像素只有1~6的数字编码,随机的.现在要统计这个矩阵中的斑块数量.斑块是指连在一起的同一类型的像素.一个单独的像素(四邻域内没有相同元素)算作一个斑块;只按对角线连接的两个或多个像素不算一个斑块,按两个斑块或多个斑块统计,即多个像素组成一个斑块必须在一个像素的四邻域内要有相同元素.需要多追加财富值的可以满足.
老师给出了一个解决方案:首先统计第一行,从第二行开始使用递推函数逐个判断,从第二行开始,每个元素的斑块归属取决于它正上方的和下一个(右边)的元素的情况,而下一个元素的情况又取决于该元素上方的和又下一个元素的情况,如此递推
![matlab用递归函数统计矩阵内斑块数](/uploads/image/z/6994173-21-3.jpg?t=matlab%E7%94%A8%E9%80%92%E5%BD%92%E5%87%BD%E6%95%B0%E7%BB%9F%E8%AE%A1%E7%9F%A9%E9%98%B5%E5%86%85%E6%96%91%E5%9D%97%E6%95%B0)
你这里的斑块其实就是连通域.MATLAb自带计算连通域个数的函数:bwlabel.
% 返回x中连通域个数
function n = f( x )
n = 0;
for i = unique(x)'
[l c] = bwlabel(x==i, 4);
n = n+c;
end
end
% 返回x中连通域个数
function n = f( x )
n = 0;
for i = unique(x)'
[l c] = bwlabel(x==i, 4);
n = n+c;
end
end