Ik selecteer voor enkele random studies per slice afbeeldingen 1 en 15. Deze trek ik van elkaar af. Er blijkt toch nog heel wat ruis over te blijven. Ik maak een eenvoudige functie om de pixelwaarden eerst naar 'klasses' toe te brengen. Dat moet in ieder geval een deel van de ruis wegnemen.
def reImage(ImIn):
f = 100.0 # Bepaald afrondings klasses Hoe groter f Hoe minder klasses.
return np.round(ImIn/f) * f
Dat lijkt al aardig te werken. Ik krijg dit soort afbeeldingen:
Daar moet ik iets mee kunnen! Na wat zoeken vind ik een mogelijkheid om de positie van 'het zwaartepunt' van een afbeelding vast te stellen. Ik teken een cirkel op dat punt met OpenCV:
from scipy import ndimage
x,y = ndimage.measurements.center_of_mass(combi)
cv2.circle(combi, (int(y),int(x)),int(0.3 * w), (255,255,255), 1)
We zitten al heel vaak in de goede richting maar vaak is de overgebleven ruis toch nog sterk genoeg om de cirkel 'uit target' te halen. Dat moet beter kunnen:
Ik maak een functie die de ruis weg haalt. Per fragment van de afbeelding kijk ik of het gemiddelde groter of kleiner is dan het totale gemiddelde. Indien kleiner zet ik de waardes op nul. Voor het gemak doe ik dat ook al even vooraf voor de randen.
def WhitenIm(ImIn):
hx,wx = ImIn.shape
#print ImIn[h-1][w-1]
si = 20
m = np.average(ImIn)
ImIn[0:si,0:wx] = 0
ImIn[hx-si:hx,0:wx] = 0
ImIn[0:hx,0:si] = 0
ImIn[0:hx,wx-si:wx] = 0
for wi in range(0,wx-si,si):
for ho in range(0,hx-si,si):
if np.average(ImIn[ho:ho+si,wi:wi+si]) < m:
ImIn[ho:ho+si,wi:wi+si] = 0.
return ImIn
Het hart wordt nu vrijwel altijd juist gevonden. Nu eens kijken of we de juiste uitsnijdingen kunnen gaan maken.
Geen opmerkingen:
Een reactie posten