![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/189772/image.png)
how can i remove the white object from binary image
1 次查看(过去 30 天)
显示 更早的评论
I have a image with my needed object (green) and the noise (white). I want to delete the noise but have no idea for that. anyone can help
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/189398/image.png)
0 个评论
采纳的回答
Gopichandh Danala
2018-4-13
You can use regionprops to compute circularity, eccentricity, or use major axis and minor axis lengths to find required shape of blob.
I used major and minor axis:
img = logical(rgb2gray(imread('green.png')));
dilate_img = imdilate(img,strel('disk',2));
BW = bwlabel(dilate_img);
blobprops = regionprops(BW, 'MajorAxisLength','MinorAxisLength', 'Eccentricity');
allMajorAxisLength = [blobprops.MajorAxisLength];
allMinorAxisLength = [blobprops.MinorAxisLength];
allEccentricity = [blobprops.Eccentricity];
MajorbyMinor = allMajorAxisLength./allMinorAxisLength;
[B,I] = sort(MajorbyMinor);
BW2 = ismember(BW,I(1));
% Using eccentricity
% [B,I] = sort(allEccentricity); % eccentricity = 0: circle, = 1: line
% BW2 = ismember(BW,I(1));
figure,
subplot(131), imshow(img), title('Original');
subplot(132), imshow(BW), title('Label');
subplot(133), imshow(BW2), title('desired');
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/189772/image.png)
2 个评论
Gopichandh Danala
2018-4-17
The answer is always based on your question. You specifically asked for the green object in your image, so I answered accordingly. For imdilate, ismember, check the documentation. The reason to use dilate in this case is to connect the objects on the right to make it as one. so, it's easy to identify it as not being a round object. To make this more generic to identify multiple regions which satisfy a certain threshold condition.
MajorbyMinor = allMajorAxisLength./allMinorAxisLength;
thresh_value = 4; % set a threshold value
indxs = MajorbyMinor < thresh_value;
% [B,I] = sort(MajorbyMinor);
BW2 = ismember(BW,find(indxs));
It all depends on your requirement. i.e. the shape, size of the object. Adjust the threshold value to meet your requirement.
更多回答(1 个)
Image Analyst
2018-4-15
You didn’t say what was unique about the object but it looks like it might be the size of the bounding box. So why don’t you compute that with regionprops()?
2 个评论
Image Analyst
2018-4-18
编辑:Image Analyst
2018-4-18
Compute the bounding box.
labeledImage = bwlabel(binaryImage);
props = regionprops(labeledImage, 'BoundingBox');
Then decide which ones to keep, like if the width to height ratio is between 0.5 and 3, or whatever.
indexesToKeep = false(1, length(props));
for k = 1 : length(props)
width = props(k).BoundingBox(3);
height = props(k).BoundingBox(4);
if width/height > 0.5 || width/height < 3
% It's a fairly square box, so keep it.
indexesToKeep(k) = true;
end
end
% Extract just acceptable blobs
indexesToKeep = find(indexesToKeep);
binaryImage2 = ismember(labeledImage, indexesToKeep);
imshow(binaryImage2);
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Segmentation and Analysis 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!