我面临一个我无法解决的众所周知的问题。我有根的图片(http://cl.ly/image/2W3C0a3X0a3Y)。从这张照片中,我想知道最长根的长度(第一个问题),大根和小根的百分比(例如作为第二个问题的方向的直径)。重要的是我可以区分细根和大根,因为这或多或少是研究的目的(其中一部分在不同物种之间进行比较)。最后一件事,我想沿着测量的最长根画一条线,以检查一切是否正确测量。
对于最长根的长度,我尝试使用 regionprops(),这不是最优的,因为如果我做对了,它假定椭圆作为基本形状。然而,我真正需要支持的事情实际上是:
如何获得最长根的长度(起点应该是最长根离开直径最大的主根的地方)?是否可以区分细根和大根,我可以得到它们的一部分吗?(硬币,图片中的圆形物体是参考)我可以在图片中绘制长度和直径等属性吗?
我发现了如何绘制椭圆和东西的质心,但我只是不明白如何使用建议的值来做到这一点。
我希望这不是双重帖子,并且这个问题在其他地方不存在这样的问题,如果是,我很抱歉。
我要感谢这个论坛上的人们,你们做得很好,每个有问题的人都可以很幸运有你们在这里。
谢谢你的帮助,菲利普
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% 编辑
我遵循了建议的解决方案,到目前为止的代码如下:
clc
clear all
close all
img=imread('root_test.jpg');
labTransformation = makecform('srgb2lab');
labI = applycform(img,labTransformation);
%seperate l,a,b
l = labI(:,:,1);
a = labI(:,:,2);
b = labI(:,:,3);
level = graythresh(l);
bw = im2bw(l);
bw = ~bw;
bw = bwareaopen(bw, 200);
se = strel('disk', 5);
bw2=imdilate(bw, se);
bw2 = imfill(bw2, 'holes');
bw3 =bwmorph(bw2, 'thin', 5);
bw3=double(bw3);
I4 = bwmorph(bw3, 'skel', 200);
%se = strel('disk', 10);%this step is for better visibility of the line
%bw4=imdilate(I4, se);
D = bwdist(I4);
这导致我的骨架图片 - 这是一个很大的进步,谢谢你!在我必须计算距离的地方,我有点过分了。我如何解释 MatLab 它必须计算从所有小根到主根的距离(如何定义?)?为此,我必须先处理直径,对吗?
您能否给出一个或另一个提示更多如何完成距离/长度问题?
感谢您提供的大力帮助!
菲利普
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EDIT2
好的,我设法分离了单个根部分。这不是您的编辑建议的内容,但至少是一些内容。我也有所有根的总长度 - 还不错。但即使有(我假设)超级简单的逐步解释,我也从未见过这样的树。我停在我必须选择一个不可见点的地方——其余的对我来说太先进了。我不想浪费更多的时间,我非常感谢你已经给我的帮助。但我想我太愚蠢了,无法做到这一点:) 谢谢!继续这样下去,真的很有帮助。
菲利普