在MATLAB中使用函数regionprops
时,可以选择提取每个连接组件的二进制图像。二进制图像的大小减小到连接组件的大小。我不希望二进制图像的大小减少。我希望二进制图像的大小保持其原始大小,同时仅在原始图像大小的相应位置显示所选连接组件。如何以原始图像大小提取连接的组件?
答案 0 :(得分:2)
只需创建一个与原始图像大小相同的空白图像,而不是每个blob提取图像,参考每个blob的原始图像提取实际像素位置,然后通过将这些位置设置为二进制来填充空白图像此空白图片中显示true
。使用PixelIdxList
中的regionprops
属性获取所需组件的列主要位置,然后使用这些属性将这些位置的输出图像设置为true
。
假设您的regionprops
结构存储在S
中,并且您想要提取k
组件并且原始图像存储在A
中,请执行以下操作:
% Allocate blank image
out = false(size(A, 1), size(A, 2));
% Run regionprops
S = regionprops(A, 'PixelIdxList');
% Determine which object to extract
k = ...; % Fill in ID here
% Obtain the indices
idx = S(k).PixelIdxList;
% Create the mask to be the same size as the original image
out(idx) = true;
imshow(out); % Show the final mask
如果您有多个对象,并且想要为每个对象单独创建此图像的原始大小,则可以使用for
循环为您执行此操作:
% Run regionprops
S = regionprops(A, 'PixelIdxList');
% For each blob...
for k = 1 : numel(S)
out = false(size(A, 1), size(A, 2)); % Allocate blank image
% Extract out the kth object's indices
idx = S(k).PixelIdxList;
% Create the mask
out(idx) = true;
% Do your processing with out ...
% ...
end