Image Matlab:图像区域分析器。'的替代方案;bwpropfilt';?

Image Matlab:图像区域分析器。'的替代方案;bwpropfilt';?,image,matlab,image-processing,Image,Matlab,Image Processing,我正在运行基本的边缘检测来检测基于此的windows区域 边缘工作正常: final_edge = edge(gray_I,'sobel'); BW_out = bwareaopen(imfill(final_edge,'holes'),20); figure; imshow(BW_out); 现在,当谈到以下基于属性过滤图像的代码时,我的MatlabR2013A似乎无法识别此bwpropfilt方法 % imageRegionAnalyzer(BW); % Filter image ba

我正在运行基本的边缘检测来检测基于此的windows区域

边缘
工作正常:

final_edge = edge(gray_I,'sobel');
BW_out = bwareaopen(imfill(final_edge,'holes'),20);
figure; 
imshow(BW_out);
现在,当谈到以下基于属性过滤图像的代码时,我的MatlabR2013A似乎无法识别此
bwpropfilt
方法

% imageRegionAnalyzer(BW);

% Filter image based on image properties
BW_out = bwpropfilt(BW_out,'Area', [400, 467]);
BW_out = bwpropfilt(BW_out,'Solidity',[0.5, 1]);
它说:

类型为“char”的输入参数的未定义函数“bwpropfilt”。

那么,我可以选择什么来更改此
bwpropfilt

只需查看从
regionprops
输出的相应属性,并为您提供符合该特定范围的对象,同时过滤掉该范围之外的对象。您可以通过显式调用重写算法,创建一个
逻辑
数组以索引到结构中,从而仅保留与要检查的属性(见
bwpropfilt
的第二个输入)对应的正确范围内的值(见
bwpropfilt
)。如果要在过滤后最终重建图像,需要使用
PixelIdxList
属性中的列主要线性索引,将它们全部堆叠到单个向量中,并通过将所有这些值设置为
true
写入新的输出图像

具体而言,您可以使用以下代码来重现所显示的最后两行代码:

% Run regionprops and get all properties
s = regionprops(BW_out, 'all');

%%% For the first line of code
values = [s.Area];
s = s(values > 400 & values < 467);

%%% For the second line of code
values = [s.Solidity];
s = s(values > 0.5 & values < 1);

% Stack column major indices
ind = vertcat(s.PixelIdxList);

% Create output image
final_out = false(size(BW_out));
final_out(ind) = true;
%运行regionprops并获取所有属性
s=区域道具(BW_out,'all');
%%%对于第一行代码
值=[s.面积];
s=s(值>400,值<467);
%%%第二行代码
值=[s.坚固性];
s=s(值>0.5,值<1);
%堆栈列主要索引
ind=vertcat(s.PixelIdxList);
%创建输出图像
最终输出=假(大小(BW输出));
最终输出(ind)=真;
final\u out
包含的过滤图像仅保留所需属性指定范围内的值

小心 上述逻辑仅适用于从
regionprops
返回的属性,这些属性每个唯一区域仅包含一个标量值。如果检查
bwpropfilt
中支持的属性,您将看到此列表是
regionprops
中完整列表的子集。这是有意义的,因为某些
regionprops
属性根据您的选择返回向量或矩阵,因此,如果有多个值表示
regionprops
返回的特定唯一区域的特征,则使用范围过滤属性将变得不明确

小调 出于好奇,我打开了
bwpropfilt
,看看它是如何实现的,因为我现在有MatlabR2016a。上述逻辑,除了一些异常处理,本质上是如何实现
bwpropfilt
,以便我编写的代码符合函数的逻辑。

只需查看从
regionprops
输出的相应属性,并为您提供符合该特定范围的对象,同时过滤掉该范围之外的对象范围您可以通过显式调用重写算法,创建一个
逻辑
数组以索引到结构中,从而仅保留与要检查的属性(见
bwpropfilt
的第二个输入)对应的正确范围内的值(见
bwpropfilt
)。如果要在过滤后最终重建图像,需要使用
PixelIdxList
属性中的列主要线性索引,将它们全部堆叠到单个向量中,并通过将所有这些值设置为
true
写入新的输出图像

具体而言,您可以使用以下代码来重现所显示的最后两行代码:

% Run regionprops and get all properties
s = regionprops(BW_out, 'all');

%%% For the first line of code
values = [s.Area];
s = s(values > 400 & values < 467);

%%% For the second line of code
values = [s.Solidity];
s = s(values > 0.5 & values < 1);

% Stack column major indices
ind = vertcat(s.PixelIdxList);

% Create output image
final_out = false(size(BW_out));
final_out(ind) = true;
%运行regionprops并获取所有属性
s=区域道具(BW_out,'all');
%%%对于第一行代码
值=[s.面积];
s=s(值>400,值<467);
%%%第二行代码
值=[s.坚固性];
s=s(值>0.5,值<1);
%堆栈列主要索引
ind=vertcat(s.PixelIdxList);
%创建输出图像
最终输出=假(大小(BW输出));
最终输出(ind)=真;
final\u out
包含的过滤图像仅保留所需属性指定范围内的值

小心 上述逻辑仅适用于从
regionprops
返回的属性,这些属性每个唯一区域仅包含一个标量值。如果检查
bwpropfilt
中支持的属性,您将看到此列表是
regionprops
中完整列表的子集。这是有意义的,因为某些
regionprops
属性根据您的选择返回向量或矩阵,因此,如果有多个值表示
regionprops
返回的特定唯一区域的特征,则使用范围过滤属性将变得不明确

小调
出于好奇,我打开了
bwpropfilt
,看看它是如何实现的,因为我现在有MatlabR2016a。上面的逻辑,除了一些异常处理之外,本质上就是如何实现
bwpropfilt
,这样我编写的代码就符合函数的逻辑。

我的上帝,我只是在你的个人资料中徘徊,你是一个活着的爱因斯坦!顺便说一句,非常感谢@嘿,伙计们,哈哈哈,你太好了:)我不会称自己为爱因斯坦,主要是因为我认为我有更好的算术技能:D。不管怎样,非常感谢你的感情,非常欢迎你。祝你好运我的天,我只是在你的个人资料里闲逛,你是个活着的爱因斯坦!顺便说一句,非常感谢@嘿,伙计们,哈哈哈,你们太好了:)我不会称自己为爱因斯坦,主要是因为我认为我有更好的算术技能:D。