貌似直接上代码,虽然显得本人实诚,但是并不被CSDN的算法看中,看来我还要再写一些废话。
好了
这个代码是直接放在matlab编译器里就可以写的
只不过需要你提前存放一张水体图片。
大家就用我这个吧。

clear;clc;
%%xt.jpg、xt.png都是我们的原始絮体图片的名字
img = imread('xt.jpg');%读取jpg格式文件,存为img空间
figure,imshow(img);%在新的一张figure中显示img
img = im2bw(img);%将img转为二进制黑白文件,存为img空间。
original_picture=imread('xt.png');%读取png格式文件,存为original_picture
img2=im2gray(original_picture);%将original_picture转为灰度图,存为img2空间
[m,n] = size(img2);%这里获取灰度图的像素的行列总数
%%
% 进行最大灰度、最小灰度计算。总的思想就是遍历所有img2像素,并两两作比较
max = 0;
min = 255;
sum = 0;
avg = 0;
for i=1:1:mfor j=1:1:nif (img2(i,j) > max)max = img2(i,j);%最大灰度endif (img2(i,j) < min)min = img2(i,j);%最小灰度endsum = sum + double(img2(i, j));end
end
avg = sum/(m*n);%平均灰度figure; imshow(img2);
%创建一个新的窗口,将img2绘制。
figure,imshow(img);
%创建一个新的窗口,将二进制黑白的图像img绘制。
[B,L] = bwboundaries(img);%利用该函数获取絮体的各个轮廓,其中B返回的每个絮体,L是每个絮体的坐标
%%
%对每个絮体进行标记
hold on;
for k = 1:length(B)%对絮体进行遍历boundary = B{k};plot(boundary(:,2),boundary(:,1),'g','LineWidth',2);
end
[L,N] = bwlabel(img);
img_rgb = label2rgb(L,'hsv',[.5 .5 .5],'shuffle');%给每个絮体生成一个颜色
figure,imshow(img_rgb);%绘制絮体区域
hold on
for k =1:length(B)boundary = B{k};plot(boundary(:,2),boundary(:,1),'w','LineWidth',2);%绘制絮体的边界:w代表white白色text(boundary(1,2),boundary(1,1),num2str(k),'Color','y','Fontsize',14,'FontWeight','bold');%给每个絮体进行编号
end
hold off;
%%
%输出每个标签的面积与周长
for i=1:length(B)%同样遍历每个絮体BsumL(i)=0;%初始化面积sumC(i)=0;%初始化周长%以下初始化x、y方向的长度minx_lenth(i)=100000;maxx_lenth(i)=0;miny_lenth(i)=100000;maxy_lenth(i)=0;%因为L存储的是絮体的像素坐标,用两层for遍历像素坐标for k =1:length(L(:,1))%k是行数for j=1:length(L(1,:))%j是列数if L(k,j)==i%如果改坐标对应的标签L是i, sumL(i)代表i标签对应的絮体的面积就+1sumL(i)=sumL(i)+1;%%%%%%%%%%%%%%%%%%%%判断i标签的最大长度,最大长度主要是用来计算分形维数if k<minx_lenth(i)minx_lenth(i)=k;endif k>maxx_lenth(i)maxx_lenth(i)=k;endif j<miny_lenth(i)miny_lenth(i)=j;endif j>maxy_lenth(i)maxy_lenth(i)=j;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%endendendif maxy_lenth(i)-miny_lenth(i)>maxx_lenth(i)-minx_lenth(i)%判断哪个方向是絮体的长度方向。maxL(i)=maxy_lenth(i)-miny_lenth(i);%各个絮体最大长度elsemaxL(i)=maxx_lenth(i)-minx_lenth(i);%各个絮体最大长度endequi_diameter(i)=sqrt(4*sumL(i)/pi);%这里计算的是各个标签i的等效直径[row,col]=size(B{i});%获取B的行数、列数for t=1:row-1%利用两点的距离完成轮廓的周长计算delta_x=abs(B{i}(t,1)-B{i}(t+1,1));delta_y=abs(B{i}(t,2)-B{i}(t+1,2));sumC(i)=sumC(i)+ sqrt(delta_y.^2+delta_x.^2);%sumC是絮体的周长end
end%%
% 计算分形维数
for i=1:length(B)DF1(i)=log(sumL(i))./log(10);DF2(i)=log(maxL(i))./log(10);DF(i)= DF1(i)./DF2(i);
end
%%
%变量说明:DF(i)—— 分形维数;sumC(i)——絮体周长; maxL(i)——絮体最大长度; sumL(i)————絮体面积;avg
%——图像平均灰度;max ————最大灰度;min ————最小灰度

我写了一个自动识别水中絮体并计算絮体体积、分形维数的算法相关推荐

  1. 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年 问题。 写一个函数days,实现上述计算。由主函数将年、月、日传递给days函数,计算后将 日子数传回主函数输出

    /*定义一个结构体变量(包括年.月.日).计算该日在本年中是第几天,注意闰年 问题. 写一个函数days,实现上述计算.由主函数将年.月.日传递给days函数,计算后将 日子数传回主函数输出*/#in ...

  2. python写一个自动识别图片提取文字

    python写一个自动识别图片提取文字. ** 1.介绍 使用python写一个自动识别图片提取文字的exe. 进行图像的文字识别,将图像中的文字提取出来,可以帮助我们完成很多有趣的事情. 准备工作 ...

  3. 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )

    文章目录 一.学生管理系统 二.代码示例 一.学生管理系统 前两篇博客 [C 语言]文件操作 ( 将结构体写出到文件中并读取结构体数据 | 将结构体数组写出到文件中并读取结构体数组数据 ) [C 语言 ...

  4. python写机器人程序_用Python写的一个多线程机器人聊天程序

    本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...

  5. c++ new一个结构体_C语言结构体,又一个纸老虎,纯干货讲解(附代码)

    来源:网络,排版整理:晓宇 微信公众号:芯片之家(ID:chiphome-dy)结构体的定义结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构.结构体和其他类型基础数 ...

  6. 用Python写了一个上课点名系统(附源码)

    今天刷到了一个这样的短视频,我寻思我是不是也可以写一个类似的上课点名程序,想法经不起等待,说写就写~ 一.准备工作 1.Tkinter Tkinter 是 python 内置的 TK GUI 工具集. ...

  7. 毕业时候写的一个PE解析小工具(MFC源码)

    这么快就成了前年毕业的老家伙了.在整理硬盘里的代码和文档的时候翻出刚毕业时候写的一个小东西,想起来那时候在武汉的小河西村,暗无天日的租房里屌丝的写着程序的日子.一晃这么久了.还是混的这鸟样.悲伤逆流成 ...

  8. python卖水果_小姨开水果店的,所以今天用Python写了一个水果店小系统!

    原标题:小姨开水果店的,所以今天用Python写了一个水果店小系统! 前言 今天晚上才刚下班,小姨就提了我最爱吃的榴莲过来,说不吃就坏了. 我一眼就看破了她的用意,哈哈哈 我这个小姨也是一起长大的,她 ...

  9. 现在出纳记账手写还是用计算机,出纳会计记账(银行存款日记账,现金帐)必须是用手写的吗?能否电脑上有什么软体直接电脑输入呢?...

    出纳会计记账(银行存款日记账,现金帐)必须是用手写的吗?能否电脑上有什么软体直接电脑输入呢?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶 ...

最新文章

  1. 程序员的自我修养--链接、装载与库笔记:Windows PE/COFF
  2. R语言ggplot2可视化抑制可视化网格中的竖线输出、抑制可视化网格中的横线线输出、抑制背景网格输出实战
  3. The Power of Ten – Rules for Developing Safety Critical Code
  4. 王陆C语言,王陆和王舞的关系
  5. win10安装jdk1.8并配置环境变量_win10系统安装jdk13.02的环境变量配置
  6. VirtualBox虚拟机与主机互相访问开启
  7. vim 强制保存只读文件
  8. Oracle Enterprise Manager 11g 启停
  9. Android -- 图片画画板(canvas、paint、bitmap)
  10. top 和cpu 负载不同_Linux: Top命令你了解多少?
  11. mysql数据库调优知识复习
  12. Java基础 IO流——第三部分
  13. CC2541蓝牙串口乱码解决
  14. GunPG使用教程(含密钥生成删除以及文件加密解密签名)
  15. win10更新后C盘空间变小解决方法
  16. python查看微信撤回消息_Python查看微信好友撤回的消息
  17. 每日一句---- Day8
  18. [机缘参悟-39]:鬼谷子-第五飞箝篇 - 警示之二:赞美的六种类型,谨防享受赞美快感如同鱼儿享受诱饵。
  19. 10个 Istio 流量管理 最常用的例子,你知道几个?
  20. Servlet的监听器实现在线人数统计

热门文章

  1. AirDisk产品Q3C体验
  2. ROS2 humble + windows10,如何安装调试rplidar a1激光扫描传感器
  3. AI+遥感:释放每个像元价值
  4. Fiddler大师之路系列(一)
  5. 25个调优工具/技术网站
  6. SolidWorks 2020机械设计从入门到精通视频教程
  7. 【管理篇 / 恢复】❀ 01. 恢复出厂设置 ❀ FortiGate 防火墙
  8. Java 构造一个银行账户类
  9. HTML5+CSS3实现非常有创意的生日蛋糕动画(含音乐)
  10. 天翼云解析工具-获取文件直链PHP源码