How can I extract the rectangular shapes form the binary images without using bwareaopen function?
Afficher commentaires plus anciens
Hello every one,
Could you please help me, how to automatically extract the rectangular object in the following two images? I used bwareaopen function to remove small objects, but it sometimes removes the region of interest because the noisy objects are bigger than the number plate.

3 commentaires
Selva Karna
le 4 Mar 2021
Modifié(e) : Selva Karna
le 4 Mar 2021
function W = Classify(ImageRead)
RGB = imread('test.bmp');
figure,
imshow(RGB),
title('Original Image');
GRAY = rgb2gray(RGB);
figure,
imshow(GRAY),
title('Gray Image');
threshold = graythresh(GRAY);
BW = im2bw(GRAY, threshold);
figure,
imshow(BW),
title('Binary Image');
BW = ~ BW;
figure,
imshow(BW),
title('Inverted Binary Image');
[B,L] = bwboundaries(BW, 'noholes');
STATS = regionprops(L, 'all'); % we need 'BoundingBox' and 'Extent'
% Step 7: Classify Shapes according to properties
% Square = 3 = (1 + 2) = (X=Y + Extent = 1)
% Rectangular = 2 = (0 + 2) = (only Extent = 1)
% Circle = 1 = (1 + 0) = (X=Y , Extent < 1)
% UNKNOWN = 0
figure,
imshow(RGB),
title('Results');
hold on
for i = 1 : length(STATS)
W(i) = uint8(abs(STATS(i).BoundingBox(3)-STATS(i).BoundingBox(4)) < 0.1);
W(i) = W(i) + 2 * uint8((STATS(i).Extent - 1) == 0 );
centroid = STATS(i).Centroid;
switch W(i)
case 1
plot(centroid(1),centroid(2),'wO');
case 2
plot(centroid(1),centroid(2),'wX');
case 3
plot(centroid(1),centroid(2),'wS');
end
end
return
Selva Karna
le 4 Mar 2021
Modifié(e) : Selva Karna
le 4 Mar 2021
from Python Code;
Code :
Main code 1 :
import cv2
import numpy as np
import os
im = cv2.imread('input1.jpg')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgray, 220, 255, 0)
edges = cv2.Canny(thresh,150,180,apertureSize = 3)
ret, labels = cv2.connectedComponents(~thresh)
x=0
[m,n]=np.shape(thresh)
c=1
cwd = os.getcwd()
msk=np.zeros(np.shape(thresh))
while c
msk=np.zeros(np.shape(thresh))
msk[(labels==c)]=[255]
msk=np.array(msk,dtype=np.uint8)
msk_img=str(c)+'.jpg'
filename = os.path.join(cwd, msk_img)
cv2.imwrite(filename,msk)
c=c+1
print("Total Polygon Objects ", c)
Javid Hamdard
le 4 Mar 2021
Réponses (1)
Keerthana Chiruvolu
le 7 Mar 2021
0 votes
Hi Javid,
One simple method would be to use the Image Segmenter App where you can draw the region of interest and extract it from the image.
1 commentaire
Javid Hamdard
le 7 Mar 2021
Catégories
En savoir plus sur Call Python from MATLAB dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!