Inhoudsopgave:

BME 60B Sandbox-project - Ajarnpa
BME 60B Sandbox-project - Ajarnpa

Video: BME 60B Sandbox-project - Ajarnpa

Video: BME 60B Sandbox-project - Ajarnpa
Video: BME Sandbox Project 2024, Juli-
Anonim
BME 60B Sandbox-project
BME 60B Sandbox-project

Ons Sandbox-project heeft tot doel onderzoekers in het biologische veld te helpen bij het analyseren van celmonsters en het achterhalen van de omstandigheden van hun cellen. Nadat de gebruiker een afbeelding van zijn celmonster heeft ingevoerd, verwerkt onze code de afbeelding om deze gereed te maken voor celtelling door de afbeelding om te zetten in grijswaarden en binair. De code maakt gebruik van drempelwaarden om overtollige informatie te verwijderen die geen betrekking heeft op de eigenlijke cellen om de celmassa's nauwkeurig te vinden. Na het aantal cellen in de afbeelding te hebben geteld, geeft onze code de pixelgrootte van de afbeelding en vindt vervolgens de verdeling van het celgebied door het aantal cellen uit te zetten tegen het gebied van cellen om de gebruiker de samenvloeiing te geven, wat de percentage van het oppervlak van een kweekschaal dat wordt bedekt door de cellen van belang. Op basis van de samenvloeiing kan de onderzoeker bepalen of de cellen moeten worden gepasseerd; celpassage verwijst naar het verlengen van de levensduur of het aantal cellen of micro-organismen door een deel van de kweek over te brengen naar een vers groeimedium, en het is nuttig wanneer cellen te groot worden of geen voedsel meer hebben. Nadat de code is uitgevoerd en de afbeelding is verwerkt, kan de gebruiker beslissen of hij de resultaten accepteert of verwerpt, en indien nodig de drempel aanpassen om gegevens beter op te halen.

Stap 1: Selecteer en configureer afbeelding voor analyse

Selecteer en configureer afbeelding voor analyse
Selecteer en configureer afbeelding voor analyse

De eerste stap in onze code is om de juiste afbeelding te selecteren en deze te configureren voor analyse in Matlab. We kunnen de afbeelding selecteren met behulp van de uigetfile-functie waarmee we elk bestand kunnen pakken en in het programma kunnen invoegen. Vervolgens lezen we met imread de afbeelding en configureren we deze voor analyse in Matlab. De geselecteerde afbeelding wordt vervolgens weergegeven op een subplot.

Stap 2: Drempel en GUI

Drempel en GUI
Drempel en GUI
Drempel en GUI
Drempel en GUI

Helemaal aan het begin van de code wordt een afbeelding gekozen met behulp van "uigetfile" en vervolgens wordt die afbeelding met een variabele gedefinieerd. De variabele wordt vervolgens gebruikt om de code te identificeren bij het uitvoeren van verschillende analyses. Een 2x2 subplot is gemaakt in figuur. In positie 1 wordt de originele afbeelding weergegeven. Het volgende deel van de code is waar de aanpassingen van drempels plaatsvinden. Aanvankelijk wordt een standaardwaarde van 0,6 gebruikt en wordt weergegeven op positie 2 van de subplot. Een if-statement wordt vervolgens gebruikt om te bepalen of de gebruiker de drempel wil behouden of aanpassen. De gebruiker kan dan de drempel aanpassen met behulp van een GUI die het beeld bevat bij verschillende drempelwaarden, de schuifregelaar en een knop voor opslaan. Nadat de drempel is ingesteld, klikt de gebruiker op de knop Opslaan om de afbeelding op te slaan en wordt deze opgeslagen in MATLAB-bestanden van de gebruiker als een-p.webp

Stap 3: Contouren plotten en celdistributie

Contouren plotten en celverdeling
Contouren plotten en celverdeling
Contouren plotten en celverdeling
Contouren plotten en celverdeling

Het volgende deel van de code geeft de contouren weer. Er is een lus waarin de cellen worden omsloten door een rode omtrek en de cellen die zich boven op een andere cel bevinden, zijn groen omlijnd. Het omlijnde beeld wordt vervolgens weergegeven op positie 3 met een interactieve afstandslijn. Deze lijn bepaalt het aantal pixels in de lijn dat door de gebruiker is aangepast voor een pixel naar millimeter converter. De afstandsfactor wordt vervolgens vermenigvuldigd met de oppervlakte bepaald door de regionprops en de oppervlakte wordt nu uitgedrukt in millimeters in het kwadraat. De gegevens worden vervolgens uitgezet met behulp van een histogram om de verdeling van cellen per gebied te zien. Dit histogram wordt dan weergegeven op positie 4.

Stap 4: celafbeelding converteren

Celafbeelding converteren
Celafbeelding converteren

In deze stap hebben we de grijswaardenafbeelding genomen en deze gebinariseerd, gefilterd en omgekeerd. Door deze functies op de afbeelding uit te voeren, werden ruisige pixels verwijderd die voor cellen konden worden aangezien, en werd de afbeelding gladder en zachter rond de celranden. Dit werd gedaan om de cellen in het beeld te extraheren als te onderscheiden "blobs" die in intensiteit verschilden van de achtergrond. De "Blobs" waren witte beelden met een hoge intensiteit en de achtergrond was zwart. Als we wat meer tijd hadden toegestaan, zouden we een andere Blob-afbeeldingsconversie hebben gebruikt in plaats van de imbinarize-functie om nauwkeuriger en beter bij onze afbeeldingen te passen, maar we hadden meer tijd nodig om de functie te onderzoeken en te implementeren.

Stap 5: Cellen tellen en celsamenvloeiing berekenen

Cellen tellen en celsamenvloeiing berekenen
Cellen tellen en celsamenvloeiing berekenen

In deze stap van de code wilden we het aantal cellen in de afbeelding tellen. We hebben voornamelijk de functie regionprops gebruikt om de gebieden van de blobs te berekenen en als het gebied werd berekend om binnen onze gewenste grens te liggen, zou het op een subplot worden uitgezet. De grenzen werden ingesteld om kleine luidruchtige pixels of grote intensiteiten die geen cellen waren, te verwijderen. De celteller zou dan de zwaartepunten tellen die vervolgens werden uitgezet en deze toevoegen aan de teller in de for-lus. Nadat de gebieden van de cellen waren bepaald, konden we de samenvloeiing berekenen. Het belangrijkste belang van deze stap in de code was het vinden van de samenvloeiing van de cellen en dit was cruciaal voor ons einddoel van de code. We hebben dit gedaan door te berekenen door de pixels (som (allAreas)) in elke blob op te tellen en deze vervolgens te delen door de totale pixelwaarde van de afbeelding (numel (img)). Deze verhouding zou ons de samenvloeiing geven en als werd vastgesteld dat deze groter was dan 80%, dan is het tijd voor de cellen om door de onderzoeker te worden gepasseerd. We wilden zo precies en nauwkeurig mogelijk zijn, maar met de beperkte tijd deed zich zo onnauwkeurigheid voor. Als de tijd het toelaat, zouden we hebben gekeken naar manieren om het tellen van blobs nauwkeuriger te maken, zoals meer filtertechnieken en/of een Hough Transform, omdat er nog niet genoeg onderzoek is gedaan om die filtertechniek uit te proberen

Stap 6: Rondheid van cellen

Rondheid van cellen
Rondheid van cellen
Rondheid van cellen
Rondheid van cellen

Voordat we de ronding van een blob in een afbeelding kunnen meten, moeten we de afbeelding converteren van RGB naar grijswaarden, binariseren, omkeren en filteren. Een filtertechniek maakt gebruik van de functie bwareaopen, die de afbeelding van belang filtert en alle specificaties of pixels verwijdert die te klein zijn en niet de grootte van een cel vertegenwoordigen. Er wordt een structurerend element gemaakt met de vorm van een schijf en een omgeving van 2 en het wordt gebruikt om eventuele gaten in de achtergrond of in de cellen op te vullen. Dan gebruiken we de functie bwboundaries die blobs traceert en opslaat in een matrix. Vervolgens labelen we de afbeelding met verschillende kleuren, zodat het een duidelijker beeld wordt. Vervolgens, met behulp van een for-lus die loopt volgens het aantal objecten en gaten in de afbeelding, stelt het een grens in rond de blobs die overeenkomen met deze array. Zodra deze lus is afgelopen, begint een andere lus, opnieuw volgens het aantal objecten en gaten in de afbeelding. Deze keer gebruiken we de functie regionprops die bepaalde eigenschappen zoals oppervlakte uit de array verzamelt en de informatie opslaat die het aantal objecten en gaten bevat. Met behulp van deze informatie berekenen we het gebied en de omtrek van deze objecten met behulp van de zwaartepuntvorm. Er wordt een drempel ingesteld om de resultaten te vergelijken zodra we de metrische eenheid van een cirkelvormig object hebben berekend en deze meting als tekst naast de berekende zwaartepunten plotten. De uiteindelijke code geeft de ronding weer van de verschillende cellen in de afbeelding en alle waarden die dicht bij de waarde liggen, zijn ronder dan andere. Een waarde van 1 houdt in dat de cel perfect rond is en in goede staat verkeert om te worden gepasseerd.

Aanbevolen: