首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DIPimage测度缺失参数

DIPimage测度缺失参数
EN

Stack Overflow用户
提问于 2020-04-12 11:59:28
回答 1查看 185关注 0票数 2

我试图使用DIPimage获取图像中每个对象的一些测量值,并得到以下错误:

代码语言:javascript
复制
Error using dip_measure
DIPlib Error in function dip_Measure.
DIPlib Error in function dip_ImageCheck: Data type not supported


Error in measure (line 209)
data = dip_measure(object_in,gray_in,measurementID,objectIDs,connectivity);

Error in Untitled (line 13)
msr = measure(b, [], ({'size', 'perimeter','podczeckShapes'}))

我该怎么解决呢?

代码:

代码语言:javascript
复制
Image = rgb2gray(imread('pillsetc.png'));

BW = imbinarize(Image);
BW = imfill(BW,'holes');
imshow(BW);

[B,L] = bwboundaries(BW,'noholes');
k = 1;
b = B{k};
y  = b(:,2);
x  = b(:,1);

msr(k) = measure(BW, [], ({'size', 'perimeter','podczeckShapes'}))
sz = msr.size;
podczeckShapes = podczeckShapes;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-12 19:01:37

代码的一个问题是对imfill的调用。因为图像周围都有明亮的值,所以人们认为有一个有洞的大物体,而你的实际物体就在这个洞里面。imfill填补了空白,使整个图像变成白色。

相反,我建议删除框架的代码如下:

代码语言:javascript
复制
Image = rgb2gray(imread('https://i.stack.imgur.com/fmqAF.jpg'));
BW = imbinarize(Image);

BW = BW - bpropagation(false(size(BW)), BW);

因为我们在DIPimage中使用了一个过滤器,所以BW变量现在包含一个dip_image对象,而不是普通的dip_image数组。dip_array(BW)提取内的普通MATLAB数组。dip_image对象的行为与MATLAB数组不同。例如,只需键入它的名称,就可以将其显示到交互式图形窗口:

代码语言:javascript
复制
BW

接下来,我们应用标记,以便知道测量数据中的哪个对象ID对应于哪个对象:

代码语言:javascript
复制
lab = label(BW);
dipshow(lab,'labels')

现在,我们可以应用测量函数。如果我们使用BW作为输入,就会调用label。既然我们已经得到了这个结果,那么让我们直接使用它:

代码语言:javascript
复制
msr = measure(lab, [], {'size', 'perimeter','podczeckShapes'});

让我们检查对象ID 8的结果,这是一个大方格:

代码语言:javascript
复制
sz = msr(8).size
square = msr(8).podczeckShapes(1)
triangle = msr(8).podczeckShapes(3)

您还可以使用度量结构做其他事情,我建议您阅读文献资料。例如,我们可以从它中去掉对最小对象的测量,在我看来,这就像噪音:

代码语言:javascript
复制
msr = msr(msr.size>100); % remove measurement for noise
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61171066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档