% 利用系统自带的米粒图片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实现...相关推荐

  1. Matlab作图后的各种调整方法——线条、坐标、标题、图例

    Matlab作图后的各种调整方法--线条.坐标.标题.图例 文章目录 Matlab作图后的各种调整方法--线条.坐标.标题.图例 一 , 写在前面 1.整个图窗 Figure(gcf) 2.我们使用命 ...

  2. 利用MATLAB编写单位冲激函数,熟悉MATLAB软件的相关函数的使用方法各种信号的时域波形.doc...

    熟悉MATLAB软件的相关函数的使用方法各种信号的时域波形 实验目的: 熟悉MATLAB软件的相关函数的使用方法.各种信号的时域波形. 实验内容: 1.用MATLAB软件绘制各类典型信号的时域波形并且 ...

  3. 算法9---二叉树的遍历不用栈和递归

    二叉树的遍历不用栈和递归 转自:ACM之家 http://www.acmerblog.com/inorder-tree-traversal-without-recursion-and-without- ...

  4. 递归:我不用栈 非递归:栈使我快乐

    偶尔敲代码,今天看树的遍历方式递归和非递归方式实现,碰到了一个关于栈的问题. 栈 栈的定义:栈是限定仅在表头进行插入和删除操作的线性表.要搞清楚这个概念,首先要明白"栈"原来的意思 ...

  5. python递归方法计算阶乘_python递归求阶乘的方法

    python递归求阶乘的方法 阶乘:例如 5! 指的是"5的阶乘",即 5! = 1*2*3*4*5. "递归"就是对自身进行调用的函数.def f(x): i ...

  6. python5的阶乘_python递归求阶乘的方法

    python递归求阶乘的方法 阶乘:例如 5! 指的是"5的阶乘",即 5! = 1*2*3*4*5. "递归"就是对自身进行调用的函数.def f(x): i ...

  7. CubieBoard开发板不用ttl线也不用hdmi线的安装方法

    本文重点在于CubieBoard开发板系统的初始化安装,并且不用ttl和hdmi线,开机就可以远程ssh进系统.本文适合没有配线的同学参考操作.事实上,无论有没有ttl线,按照本文的方法安装效率都是一 ...

  8. 【转】更简单的非递归遍历二叉树的方法

    [转]更简单的非递归遍历二叉树的方法 解决二叉树的很多问题的方案都是基于对二叉树的遍历.遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了.其递归遍历是人人都能信手拈来,可是在手生时写出 ...

  9. 【学习笔记】求解简单递归式的一般方法

    [学习笔记]求解简单递归式的一般方法 手动博客搬家: 本文发表于20180618 15:53:06, 原地址https://blog.csdn.net/suncongbo/article/detail ...

最新文章

  1. git push 如何同时推送至两个git仓库
  2. 2022-03-22
  3. [转]Shared——回调函数是什么
  4. python 完全面向对象_python 面向对象(一)
  5. getsockname函数与getpeername函数的使用
  6. LeetCode 1337. 方阵中战斗力最弱的 K 行(优先队列)
  7. [转]Gson的基本使用
  8. MATLAB 在图像处理和机器视觉的应用举例01 - 官网培训视频笔记(下)分类/灰度共生矩阵/纹理分类学习
  9. dell r230u盘启动安装2008_dell r230服务器 怎么u盘开启
  10. red linux系统管理,Red hat Linux 系统管理篇 4
  11. 【笔记】定积分的近似计算
  12. Fragstats计算景观格局指数——批量计算(二)
  13. flixel 一个游戏开发的框架
  14. mysql服务starting_MySQl服务无法启动(Starting MySQL.The server quit withou)
  15. 模拟电话交换机和IPPBX之间进行连接
  16. 逻辑左移,逻辑右移,算术左移,算术右移的区分
  17. JsBarcode:JS条形码生成
  18. 解决xxx.exe-无法找到入口,无法定位程序输入点......于动态链接库
  19. 引用网络jQuery地址
  20. 医嘱计算机录入管理制度,医院病房医嘱计算机录入管理制度.doc

热门文章

  1. 自助售卖 | 京品高科咖啡系统
  2. 《5G+:开启商业模式新生代》赠书活动名单公告
  3. 一对一直播源码开发选择Java还是php?
  4. android adb shell device not found 或 adb devices 无设备
  5. 初学Andorid前沿
  6. C 语言进阶:造一个简单的浏览器
  7. 第十二届蓝桥杯省赛c++b组—杨辉三角形
  8. html网页制作期末大作业成品:健身网站 bootstarp 响应式 4页 带汉堡菜单
  9. 主  题: 本人一年以来,呕心沥血收集“袁峰(MSFT)”大哥精彩回帖的贴子,现在回报社会。有不全的请
  10. 搞定!360行车记录仪无法开机,黑屏,时间错乱问题。