- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我花了一整天的时间阅读上述 MATLAB 函数。我似乎无法在网上找到任何好的解释,即使是在 MathWorks 网站上!
如果有人可以解释,我将不胜感激 bwlabel
, regionprops
和 centroid
.如果应用于灰度图像,它们如何工作?
具体来说,它们在下面的代码中被使用。上面的函数如何应用于下面的代码?
fun=@minutie; L = nlfilter(K,[3 3],fun);
%% Termination LTerm=(L==1);
figure; imshow(LTerm)
LTermLab=bwlabel(LTerm);
propTerm=regionprops(LTermLab,'Centroid');
CentroidTerm=round(cat(1,LTerm(:).Centroid));
figure; imshow(~K)
set(gcf,'position',[1 1 600 600]); hold on
plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro')
最佳答案
解释的太啰嗦了!...不过,我很想给你解释一下。但是,我有点惊讶您无法理解 MathWorks 的文档。它实际上很好地解释了很多(如果不是全部……)它们的功能。
顺便说一句,bwlabel
和 regionprops
是 未定义 用于灰度图像。您只能将这些应用于 二进制 图片。
更新: bwlabel
仍然有接受二值图像的限制,但 regionprops
不再有此限制。它还可以接收 标签通常从 bwlabel
输出的矩阵以及二进制图像。
假设你想要的是二进制图像,我对每个函数的解释如下。bwlabel
bwlabel
接收一个二值图像。这个二值图像应该包含一堆彼此分开的对象。属于对象的像素用 1
表示/true
而那些作为背景的像素是 0
/false
.例如,假设我们有一个如下所示的二进制图像:
0 0 0 0 0 1 1 1 0 0
0 1 0 1 0 0 1 1 0 0
0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 0 0 1 1
您可以在此图像中看到
四 此图像中的对象。对象的定义是
1
的那些像素通过查看本地社区,将它们连接成一个链。我们通常会查看 8 像素的社区,您可以查看北、东北、东、东南、南、西南、西、西北方向。另一种说法是对象是
8连 .为简单起见,有时人们会查看 4 像素的社区,而您只查看北、东、南和西方向。这将意味着对象是
4连 .
bwlabel
的输出会给你一个整数映射,其中每个对象是
分配了唯一 ID .因此,
bwlabel
的输出看起来像这样:
0 0 0 0 0 3 3 3 0 0
0 1 0 1 0 0 3 3 0 0
0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 4
0 0 0 0 0 0 0 0 4 4
0 0 2 2 2 2 0 0 4 4
因为 MATLAB 处理列主要内容,这就是为什么标签是你在上面看到的。因此,
bwlabel
给你
成员(member)每个像素的。如果每个像素落在对象上,这会告诉您每个像素所属的位置。
0
在这张 map 中对应于背景。调用
bwlabel
, 你可以做:
L = bwlabel(img);
img
将是您提供给函数的二进制图像和
L
就是我刚才讲的整数映射。此外,您可以向
bwlabel
提供 2 个输出,第二个参数告诉您图像中存在多少个对象。像这样:
[L, num] = bwlabel(img);
在我们上面的例子中,
num
将是 4。作为另一种调用方法,您可以指定要检查的连接像素邻域,因此您可以这样做:
[L, num] = bwlabel(img, N);
N
将是您要检查的像素邻域(即 4 或 8)。
regionprops
regionprops
是我每天都在使用的一个非常有用的功能。
regionprops
测量黑白图像中的各种图像数量和特征。具体来说,给定一个黑白图像,它会自动确定每个 8 连接的连续白色区域的属性。这些特殊属性之一是
质心 .这也是重心。您可以将其视为对象的“中间”。这将是
(x,y)
每个对象的中间所在的位置。因此,
Centroid
为
regionprops
这样对于在图像中看到的每个对象,这将计算对象的质心和
regionprops
的输出。将返回一个结构,其中该结构的每个元素都会告诉您黑白图像中每个对象的质心是什么。
Centroid
只是属性之一。还有其他有用的功能,但我假设您不想这样做。调用
regionprops
,你会这样做:
s = regionprops(img, 'Centroid');
上面的代码将计算图像中每个对象的质心。您可以为
regionprops
指定其他标志指定您想要的每个功能。我强烈建议您查看
regionprops
的所有可能功能。可以计算,因为有许多在各种不同的应用程序和情况下都很有用。
regionprops
后会发生的情况。 .之后,让我们计算质心是什么:
img = logical(...
[0 0 0 0 0 1 1 1 0 0;
0 1 0 1 0 0 1 1 0 0;
0 1 1 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 1;
0 0 0 0 0 0 0 0 1 1;
0 0 1 1 1 1 0 0 1 1]);
s = regionprops(img, 'Centroid');
...最后当我们显示质心时:
>> disp(cat(1,s.Centroid))
3.0000 2.6000
4.5000 6.0000
7.2000 1.4000
9.6000 5.2000
因此,第一个质心位于
(x,y) = (3, 2.6)
,下一个质心位于
(x,y) = (4.5, 6)
等等。请特别注意
x
坐标是
栏目 而
y
坐标是
行 .
关于image - Matlab的bwlabel,regionprops & centroid函数解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984552/
我正在用 python 做一些 OCR,为了得到图像中字母的坐标,我取了一个区域的质心(由 skimage.measure 的 regionprops 返回),如果一个质心与其他质心小于某个值,我放弃
我花了一整天的时间阅读上述 MATLAB 函数。我似乎无法在网上找到任何好的解释,即使是在 MathWorks 网站上! 如果有人可以解释,我将不胜感激 bwlabel , regionprops和
我得到了应用 regionprops 来提取 ROI 的概念。基本上,regionprops 使用连接组件技术来提取对象。但是,我想问的是在“BoundingBox”上使用 regionprops,连
有没有办法得到相同的结果 cDist=regionprops(bwImg, '区域');和 openCV 的 findContours? 输入图像: 黑白输入图像: 到目前为止,这是我尝试过的: ds
我正在尝试分析灰度 TIFF 堆栈,其中给定的帧看起来像 this .我对其进行过滤(使用高斯模糊),然后将其二值化(使用 Otsu 的阈值方法)。 MATLAB 代码,效果很好: image_con
我正在使用 regionprops e(或 scikit-imag )包中的 skimage 函数,使用同一包中的 SLIC 超像素算法计算分割图像的区域特征。 我需要比函数中计算的那些额外的特征,主
我正在 MATLAB 中处理图像中的粒子跟踪并使用 regionprops功能。在提供的资源中有一个带圆圈的示例: stats = regionprops('table',bw,'Centroid',
我正在关注这个 tutorial 目标是能够吐出:A。每个标记对象的中心b.与每个标记对象关联的所有像素 在某种程度上,我有一个“a”的数组。对于每个对象,或“b.”对于每个对象 我真的不知道该怎么做
使用 Matlab 的图像处理工具箱,我可以使用 regionprops function 找到加权质心.这是因为该函数可以通过 PixelList 返回 WeightedCentroid 或图像每个
我在较大的图像中识别出一些粒子,需要为每个粒子解析成较小的图像。我已经使用了 regionprops 'BoundingBox' 功能,但还没有成功。我现在如何使用 BoundingBox 制作图像的
我有 1797 张 Mnist 图像,为此我需要提取两个特征(FilledArea、EulerNumber)。我知道如何在 Matlab 中做到这一点。我的特征矩阵在 Matlab 中具有(并且是正确
我是一名优秀的程序员,十分优秀!