Я обрабатываю изображение с фигурами, и я пытаюсь подсчитать объекты, которые имеют 1 отверстие, и те, у которых есть 2.
Я нашел информацию об этом, но она была в MATLAB Сегментируйте те объекты, в которых есть дыры
Они использовали характеристику Эйлера, я знаю, что в Python есть библиотека skimage, но я не могу ее использовать.
Я тоже нашел какой-то код, но не могу его понять. http://www.cis.rit.edu/class/simg782/homework/hw3/hw3solutions.pdf Стр. 16.
PRO hw3 4,A,LA,LC,count
;Find all the holes
Ac=A EQ 0
LC=label region(Ac,/ALL)
;Construct an array with the holes filled in
Afill=(A GT 0) OR (LC GT 1)
;Display the arrays
sa=size(A,/dim)
window,/free,xsize=sa[0],ysize=sa[1]
tvlct,rr,gg,bb,/get
tek color
TV,Afill
window,/free,xsize=sa[0],ysize=sa[1]
TV,LC
;Count the objects with holes. First we
;find all the objects and then match up
;the object labels and the hole labels.
LA=label region(Afill)
window,/free,xsize=sa[0],ysize=sa[1]
TV,LA
ha=histogram(LA)
ia=where(ha ge 0)
print,format=’("Objects",3x,"Count",/,(i2,5x,i7))’,$
[transpose(ia),transpose(ha[ia])]
;Each element of ia corresponds to a filled
;object. Object k is labeled ia[k]. For each
;object that is not background,
;determine whether it has holes.
c=0
print
print,"k ia[k] N C"
For k=1,n elements(ia)-1 DO BEGIN
B=bytarr(sa[0],sa[1]); Make an array with one object
ik=Where(LA eq ia[k]); ;Fill in the object
IF MIN(ik) GE 0 THEN B[ik]=1
;Now see if any of the object pixels match the
;hole image LC. Counts if one or more holes.
IF MAX(B AND (LC GT 0)) GT 0 THEN c++
print,[k,ia[k],n elements(ik),c],format=’(I2,1x,I2,3x,I5,2x,I1)’
END
Print,’Number of objects with one or more holes=’,count
tvlct,rr,gg,bb
END
IDL> hw3 4,A,LA,LC,count
Идея состоит в том, чтобы подсчитать объекты с 1 отверстием и объекты с 2 отверстиями и выделить их края.
"Количество объектов с одним отверстием: 2"
"Количество объектов с двумя отверстиями: 4"
Вот что у меня есть, я сделал это простым cv2.HoughCircles
: