Een koloniepikker is een instrument waarmee microbiële kolonies die op een vaste voedingsbodem groeien automatisch kunnen worden gelocaliseerd, opgepikt en gedupliceerd op een vaste of vloeibare voedingsbodem. Doorgaans wordt een petrischaal aangebracht op de lichtplaat van de koloniepikker, waarna algoritmen voor beeldanalyse de juiste kolonies uitkiezen en een robotarm aansturen om die kolonies te bemonsteren. Dergelijke toestellen worden zowel in onderzoekslaboratoria als in industriële omgevingen gebruikt, bijvoorbeeld om voedings- of bloedstalen te analyseren.

koloniepikker Victoria amazonica

De beeldverwerkingssoftware krijgt de foto van een petriplaat te zien onder de vorm van een bitmap. Dit is niets anders dan een rechthoekig rooster waarvan de vakjes bits genoemd worden omdat ze slechts twee toestanden kunnen aannemen. Elke bit van het rooster is ofwel leeg (voorgesteld door een spatie) of wordt bedekt door een kolonie (voorgesteld door een hekje: #). Als voorbeeld zie je hieronder een bitmap waarop een aantal kolonies te zien zijn. In een bitmap wordt een kolonie gevormd door een gebied van aangrenzende bedekte bits. Bits worden hierbij aangrenzend genoemd als ze een gemeenschappelijke zijde hebben. De software zal een gebied van aangrenzende bedekte bits echter nooit als een kolonie beschouwen, als het bits op de buitenste rand van de bitmap bevat.

bitmap van een petriplaat

Opgave

Definieer een klasse Petrischaal waarmee kolonies op een petrischaal kunnen geanalyseerd worden. De objecten van deze klasse moeten minstens de volgende methoden hebben:

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand schaal.txt zich in de huidige directory bevindt. Dit bestand bevat de bitmap van een petriplaat die hierboven grafisch werd weergegeven.

>>> schaal = Petrischaal('schaal.txt')
>>> print(schaal)
<BLANKLINE>
                         ###                                
                         #####                              
                         #######                            
                        #######                             
                         ######                             
                         ###### ##                          
                         ####  #####                        
                           ## ######        ####            
                        #    ######       ####              
                      ###  ##########    #####              
                    #######  ####  ##   ######              
                    ######### ##   #      #####             
          #           ####   ###          ###               
         #####        ####    #     ##     ##               
         #####                    ######    #               
        ######                   ########                   
         ####                     ########                  
                                  #######                   
                                  #######                   
>>> schaal.kolonie(10, 35)
42
>>> print(schaal)
<BLANKLINE>
                         ###                                
                         #####                              
                         #######                            
                        #######                             
                         ######                             
                         ###### ..                          
                         ####  .....                        
                           ## ......        ####            
                        #    ......       ####              
                      ###  ..........    #####              
                    #######  ....  ..   ######              
                    ######### ..   .      #####             
          #           ####   ...          ###               
         #####        ####    .     ##     ##               
         #####                    ######    #               
        ######                   ########                   
         ####                     ########                  
                                  #######                   
                                  #######                   
>>> schaal.kolonie(10, 40)
Traceback (most recent call last):
AssertionError: geen kolonie gevonden op positie (10, 40)
>>> schaal.kolonie(10, 45)
30
>>> print(schaal)
<BLANKLINE>
                         ###                                
                         #####                              
                         #######                            
                        #######                             
                         ######                             
                         ###### ..                          
                         ####  .....                        
                           ## ......        ....            
                        #    ......       ....              
                      ###  ..........    .....              
                    #######  ....  ..   ......              
                    ######### ..   .      .....             
          #           ####   ...          ...               
         #####        ####    .     ##     ..               
         #####                    ######    .               
        ######                   ########                   
         ####                     ########                  
                                  #######                   
                                  #######                   
>>> schaal.ongedaan_maken()
>>> print(schaal)
<BLANKLINE>
                         ###                                
                         #####                              
                         #######                            
                        #######                             
                         ######                             
                         ###### ##                          
                         ####  #####                        
                           ## ######        ####            
                        #    ######       ####              
                      ###  ##########    #####              
                    #######  ####  ##   ######              
                    ######### ##   #      #####             
          #           ####   ###          ###               
         #####        ####    #     ##     ##               
         #####                    ######    #               
        ######                   ########                   
         ####                     ########                  
                                  #######                   
                                  #######                   
>>> schaal.kolonies()
5
>>> schaal.koloniegrootte()
32.2