WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

rekursive region-growing Funktion

 

Foxtrot
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 24.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2015, 11:45     Titel: rekursive region-growing Funktion
  Antworten mit Zitat      
Guten Tag,

Ich habe mich daran versucht für eine Projektarbeit für meine Hochschule einen region growing Algorithmus zum Laufen zu bringen.

Ich habe allerdings noch ein kleineres und ein größeres Problem.

Der Schwellwert für das hinzufügen weiterer Pixel an eine Region wird über eine kleine Betragsrechnung gebildet. Je nachdem welche Grauwerte ich segmentiere, funktioniert das besser oder schlechter.

Zu finden is diese Rechnung in Zeile 6 der Rekursivfunktion "Nachbarsuche"

Das zweite Problem ist, dass meine Rekursivfunktion nicht oft genug aufgerufen werden kann. Bei einem Bild von etwa 100 auf 200 Pixel ist es nicht möglich eine etwa 20x20 Pixel große Stelle zu segmentieren. Diesen Wert der angibt wie oft die Funktion durchlaufen darf, konnte ich von 500 (standard) auf etwa 1200 erhöhen bevor Matlab abstürzt. Gibt es noch weitere Mögichkeiten diesen Wert zu erhöhen? Besonders komplex ist die Funktion ja nun eigentlich nicht.

Ich hoffe jemand hier besitzt die Muse mir zu helfen.

Ich weiß nicht mehr an wen ich mich noch wenden kann.

Hier die beiden Funktionen region_growing (hauptfunktion) und Nachbarsuche (rekursivfunktion).
Auch im Anhang als .m File. Sowie einige Testbilder.

Zitat:

%I=Input Image
%T=Tolerance of threshold in percent
%O=Output
%ZZmain=Navigator through Liste
%S=Threshold

function [O] = region_growing(I,T)
set(0,'RecursionLimit',2000)
T=0;
if T==0
T=30;
end

%TO DO GUI: If Input Threshold if empty, standard Threshold is 30
I=imread(I); %Read Input Image
I=I(:,:,1);
%Erzeugung von weißem Rahmen
[x, y, ~]=size(I);


I2=ones(y+2,x+2);
I2=uint8(I2);
I2=I2*255;
for j = 1:1:x
for k = 1:1:y
I2(j+1,k+1)=I(j,k);
end
end
I=I2;
imtool(I);

%Threshold percent 2 numeric
S=T*255/100;

figure; imshow(I); %Show Input Image

[xcoord,ycoord]=ginput(1); %Create seedpoint
xcoord=round(xcoord);
ycoord=round(ycoord);
Liste=[0 0];
ZeilenZaehler=1;

[ListeRueck, ZZreturn] = NachbarSuche(xcoord, ycoord, I, S, Liste, ZeilenZaehler)

Zitat:
function [ListeRueck, ZZreturn] = NachbarSuche(xcoord, ycoord, I, S, Liste, ZeilenZaehler)
h=-1;
j=-1;
for h=-1:1:1
for j=-1:1:1
if abs(I(xcoord+h,ycoord+j) - I(xcoord,ycoord)) < S % Schwellwertausschlusskriterium
if ismember([xcoord+h ycoord+j], Liste, 'rows')~=1
Liste(ZeilenZaehler,1)=xcoord+h;
Liste(ZeilenZaehler,2)=ycoord+j;
ZeilenZaehler=ZeilenZaehler+1;
[ListeRueck, ZZreturn]=NachbarSuche(xcoord+h, ycoord+j, I, S, Liste, ZeilenZaehler);
Liste=ListeRueck;
ZeilenZaehler=ZZreturn;
end
end
end
end

ZZreturn=ZeilenZaehler;
ListeRueck=Liste;

end


Ibunt=cat(3,I,I,I); %Initialisierung RGBbild



ZZmain=1; %ZeilenZaehler der Hauptfunktion zum Abruf der Koordinaten aus der Liste
i=1;
for i = 1:1:ZZreturn-1 %Abfragen Listeneinträge

x=ListeRueck(ZZmain,1);
y=ListeRueck(ZZmain,2);

Ibunt (x,y,1)=0; %Einfärben
Ibunt (x,y,2)=200;
Ibunt (x,y,3)=220;
ZZmain=ZZmain+1;
end

O=Ibunt;

imtool(O);


clear Liste;
clear ListeRueck;
end



Gruß

test2.png
 Beschreibung:

Download
 Dateiname:  test2.png
 Dateigröße:  250 Bytes
 Heruntergeladen:  192 mal
9t.PNG
 Beschreibung:

Download
 Dateiname:  9t.PNG
 Dateigröße:  25.26 KB
 Heruntergeladen:  229 mal
NachbarSuche.m
 Beschreibung:

Download
 Dateiname:  NachbarSuche.m
 Dateigröße:  815 Bytes
 Heruntergeladen:  241 mal
region_growing.m
 Beschreibung:

Download
 Dateiname:  region_growing.m
 Dateigröße:  1.41 KB
 Heruntergeladen:  243 mal
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.