辛普森matlab 不用递归,不用递归的方法计算米粒的个数和每个米粒的面积,matlab实现...
% 利用系统自带的米粒图片rice.png, 对该图片进行预处理后,计算该点中每个米粒的面积和所有米粒的个数,中间用到了求一个点所在的连通域的算法
clear all
clc
close all
I = imread('rice.png');
edI = edge(I, 'canny');
fhI = imfill(edI, 'hole');
se = strel('disk', 4);
opI = imopen(fhI, se);
% opI = ones(100,100);
% opI = im2bw(opI);
figure,imshow(opI);
[row col] = size(opI);
count = 0;
ricearr = zeros(row*col,1);
visited = zeros(size(opI));
% 调用计算连通域函数进行数米粒和计算米粒的面积
for i = 1:row
for j = 1:col
if opI(i,j)&&visited(i,j) == 0
count = count +1;
pt = [i; j];
[c ,domain] = finddomain(opI, pt);
ricearr(count) = c;
for m = 1:c
visited(domain(1,m), domain(2, m)) = 1;
end
end
end
end
disp('米粒的个数为');
disp(count);
disp('每个米粒的面积为');
disp(ricearr(1:count));
% 求一个点所在连通域的算法
function [c, domain] = finddomain(input, pt)
% 输入一幅图像,及图像中的一个点,得到图像中该点所在的连通域和连通域中像素的个数并输出。
% 输入一个白点,将该点周围领域的白点入队列,对队列中的点继续进行查找
[row col] = size(input);
iplus = [-1 -1 0 1 1 1 0 -1];
jplus = [0 1 1 1 0 -1 -1 -1];
visited = zeros(size(input));
stack = zeros(2, row*col);
domain = zeros(2, row*col);
stack(:, 1) = pt;
domain(:, 1) = pt;
visited(pt(1), pt(2)) = 1;
count = 1;
eos = 1;
sos = 1;
while sos ~= eos + 1
m = stack(1, sos);
n = stack(2, sos);
for i = 1: 8 % 寻找邻域中的白点,如果是白点入队列,并标明已访问过。
if m+ iplus(i) > 0 && m + iplus(i) <= row && n + jplus(i) >0 && n + jplus(i) <= col
if input(m + iplus(i), n+ jplus(i)) == 1 && visited(m + iplus(i), n+ jplus(i)) == 0
eos = eos + 1;
stack(:, eos) = [m + iplus(i); n+ jplus(i)];
visited(m + iplus(i), n+ jplus(i)) = 1;
count = count + 1;
domain(:, count) = [m + iplus(i); n + jplus(i)];
end
end
end
sos = sos + 1; % 当邻域内的点都被访问过后,该点出队列,对应指针加1.
end
c = count;
辛普森matlab 不用递归,不用递归的方法计算米粒的个数和每个米粒的面积,matlab实现...相关推荐
- Matlab作图后的各种调整方法——线条、坐标、标题、图例
Matlab作图后的各种调整方法--线条.坐标.标题.图例 文章目录 Matlab作图后的各种调整方法--线条.坐标.标题.图例 一 , 写在前面 1.整个图窗 Figure(gcf) 2.我们使用命 ...
- 利用MATLAB编写单位冲激函数,熟悉MATLAB软件的相关函数的使用方法各种信号的时域波形.doc...
熟悉MATLAB软件的相关函数的使用方法各种信号的时域波形 实验目的: 熟悉MATLAB软件的相关函数的使用方法.各种信号的时域波形. 实验内容: 1.用MATLAB软件绘制各类典型信号的时域波形并且 ...
- 算法9---二叉树的遍历不用栈和递归
二叉树的遍历不用栈和递归 转自:ACM之家 http://www.acmerblog.com/inorder-tree-traversal-without-recursion-and-without- ...
- 递归:我不用栈 非递归:栈使我快乐
偶尔敲代码,今天看树的遍历方式递归和非递归方式实现,碰到了一个关于栈的问题. 栈 栈的定义:栈是限定仅在表头进行插入和删除操作的线性表.要搞清楚这个概念,首先要明白"栈"原来的意思 ...
- python递归方法计算阶乘_python递归求阶乘的方法
python递归求阶乘的方法 阶乘:例如 5! 指的是"5的阶乘",即 5! = 1*2*3*4*5. "递归"就是对自身进行调用的函数.def f(x): i ...
- python5的阶乘_python递归求阶乘的方法
python递归求阶乘的方法 阶乘:例如 5! 指的是"5的阶乘",即 5! = 1*2*3*4*5. "递归"就是对自身进行调用的函数.def f(x): i ...
- CubieBoard开发板不用ttl线也不用hdmi线的安装方法
本文重点在于CubieBoard开发板系统的初始化安装,并且不用ttl和hdmi线,开机就可以远程ssh进系统.本文适合没有配线的同学参考操作.事实上,无论有没有ttl线,按照本文的方法安装效率都是一 ...
- 【转】更简单的非递归遍历二叉树的方法
[转]更简单的非递归遍历二叉树的方法 解决二叉树的很多问题的方案都是基于对二叉树的遍历.遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了.其递归遍历是人人都能信手拈来,可是在手生时写出 ...
- 【学习笔记】求解简单递归式的一般方法
[学习笔记]求解简单递归式的一般方法 手动博客搬家: 本文发表于20180618 15:53:06, 原地址https://blog.csdn.net/suncongbo/article/detail ...
最新文章
- git push 如何同时推送至两个git仓库
- 2022-03-22
- [转]Shared——回调函数是什么
- python 完全面向对象_python 面向对象(一)
- getsockname函数与getpeername函数的使用
- LeetCode 1337. 方阵中战斗力最弱的 K 行(优先队列)
- [转]Gson的基本使用
- MATLAB 在图像处理和机器视觉的应用举例01 - 官网培训视频笔记(下)分类/灰度共生矩阵/纹理分类学习
- dell r230u盘启动安装2008_dell r230服务器 怎么u盘开启
- red linux系统管理,Red hat Linux 系统管理篇 4
- 【笔记】定积分的近似计算
- Fragstats计算景观格局指数——批量计算(二)
- flixel 一个游戏开发的框架
- mysql服务starting_MySQl服务无法启动(Starting MySQL.The server quit withou)
- 模拟电话交换机和IPPBX之间进行连接
- 逻辑左移,逻辑右移,算术左移,算术右移的区分
- JsBarcode:JS条形码生成
- 解决xxx.exe-无法找到入口,无法定位程序输入点......于动态链接库
- 引用网络jQuery地址
- 医嘱计算机录入管理制度,医院病房医嘱计算机录入管理制度.doc
热门文章
- 自助售卖 | 京品高科咖啡系统
- 《5G+:开启商业模式新生代》赠书活动名单公告
- 一对一直播源码开发选择Java还是php?
- android adb shell device not found 或 adb devices 无设备
- 初学Andorid前沿
- C 语言进阶:造一个简单的浏览器
- 第十二届蓝桥杯省赛c++b组—杨辉三角形
- html网页制作期末大作业成品:健身网站 bootstarp 响应式 4页 带汉堡菜单
- 主 题: 本人一年以来,呕心沥血收集“袁峰(MSFT)”大哥精彩回帖的贴子,现在回报社会。有不全的请
- 搞定!360行车记录仪无法开机,黑屏,时间错乱问题。