我写了一个自动识别水中絮体并计算絮体体积、分形维数的算法
貌似直接上代码,虽然显得本人实诚,但是并不被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 ————最小灰度
我写了一个自动识别水中絮体并计算絮体体积、分形维数的算法相关推荐
- 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年 问题。 写一个函数days,实现上述计算。由主函数将年、月、日传递给days函数,计算后将 日子数传回主函数输出
/*定义一个结构体变量(包括年.月.日).计算该日在本年中是第几天,注意闰年 问题. 写一个函数days,实现上述计算.由主函数将年.月.日传递给days函数,计算后将 日子数传回主函数输出*/#in ...
- python写一个自动识别图片提取文字
python写一个自动识别图片提取文字. ** 1.介绍 使用python写一个自动识别图片提取文字的exe. 进行图像的文字识别,将图像中的文字提取出来,可以帮助我们完成很多有趣的事情. 准备工作 ...
- 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )
文章目录 一.学生管理系统 二.代码示例 一.学生管理系统 前两篇博客 [C 语言]文件操作 ( 将结构体写出到文件中并读取结构体数据 | 将结构体数组写出到文件中并读取结构体数组数据 ) [C 语言 ...
- python写机器人程序_用Python写的一个多线程机器人聊天程序
本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...
- c++ new一个结构体_C语言结构体,又一个纸老虎,纯干货讲解(附代码)
来源:网络,排版整理:晓宇 微信公众号:芯片之家(ID:chiphome-dy)结构体的定义结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构.结构体和其他类型基础数 ...
- 用Python写了一个上课点名系统(附源码)
今天刷到了一个这样的短视频,我寻思我是不是也可以写一个类似的上课点名程序,想法经不起等待,说写就写~ 一.准备工作 1.Tkinter Tkinter 是 python 内置的 TK GUI 工具集. ...
- 毕业时候写的一个PE解析小工具(MFC源码)
这么快就成了前年毕业的老家伙了.在整理硬盘里的代码和文档的时候翻出刚毕业时候写的一个小东西,想起来那时候在武汉的小河西村,暗无天日的租房里屌丝的写着程序的日子.一晃这么久了.还是混的这鸟样.悲伤逆流成 ...
- python卖水果_小姨开水果店的,所以今天用Python写了一个水果店小系统!
原标题:小姨开水果店的,所以今天用Python写了一个水果店小系统! 前言 今天晚上才刚下班,小姨就提了我最爱吃的榴莲过来,说不吃就坏了. 我一眼就看破了她的用意,哈哈哈 我这个小姨也是一起长大的,她 ...
- 现在出纳记账手写还是用计算机,出纳会计记账(银行存款日记账,现金帐)必须是用手写的吗?能否电脑上有什么软体直接电脑输入呢?...
出纳会计记账(银行存款日记账,现金帐)必须是用手写的吗?能否电脑上有什么软体直接电脑输入呢?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶 ...
最新文章
- 程序员的自我修养--链接、装载与库笔记:Windows PE/COFF
- R语言ggplot2可视化抑制可视化网格中的竖线输出、抑制可视化网格中的横线线输出、抑制背景网格输出实战
- The Power of Ten – Rules for Developing Safety Critical Code
- 王陆C语言,王陆和王舞的关系
- win10安装jdk1.8并配置环境变量_win10系统安装jdk13.02的环境变量配置
- VirtualBox虚拟机与主机互相访问开启
- vim 强制保存只读文件
- Oracle Enterprise Manager 11g 启停
- Android -- 图片画画板(canvas、paint、bitmap)
- top 和cpu 负载不同_Linux: Top命令你了解多少?
- mysql数据库调优知识复习
- Java基础 IO流——第三部分
- CC2541蓝牙串口乱码解决
- GunPG使用教程(含密钥生成删除以及文件加密解密签名)
- win10更新后C盘空间变小解决方法
- python查看微信撤回消息_Python查看微信好友撤回的消息
- 每日一句---- Day8
- [机缘参悟-39]:鬼谷子-第五飞箝篇 - 警示之二:赞美的六种类型,谨防享受赞美快感如同鱼儿享受诱饵。
- 10个 Istio 流量管理 最常用的例子,你知道几个?
- Servlet的监听器实现在线人数统计