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

imfill funktioniert irgendwie nicht so, wie es soll...

 

Buhmann
Forum-Anfänger

Forum-Anfänger



Beiträge: 30
Anmeldedatum: 25.05.11
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 01.06.2012, 22:56     Titel: imfill funktioniert irgendwie nicht so, wie es soll...
  Antworten mit Zitat      
Hallo zusammen!

Mit imfill hab ich mich wirklich schon oft rumgeärgert. Jetzt bin ich auf Hilfe angewiesen...

Ich habe hier ein kurzes Programm, das mir 3 der Münzen aus dem Standardbild löschen soll:


(copy-paste-ausführbar)
Code:

IMG = imread('eight.tif');
IMGBW = zeros(size(IMG));
IMGBW(IMG > 150) = 1;
IMGBW = imfill(~IMGBW,'holes');
se = strel('disk',3,8);
IMGBW = imdilate(IMGBW,se);

CC = bwconncomp(IMGBW);
stats = regionprops(CC,{'Area','Centroid'});
statsCell = struct2cell(stats);
statsMat = cell2mat(statsCell');
areas = statsMat(:,1);
centroids = statsMat(:,2:3);
deleteMe = round(centroids(areas < 5000,:))

IMGBW = ~imfill(~IMGBW,deleteMe);
imshow(IMGBW)
 


3 der Münzen bzw. Flächen haben eine Fläche < 5000, eine > 5000.
Wenn ich nun imfill auswähle, bekomm ich folgende Fehlermeldung:

Code:

Warning: Ignoring out-of-range locations.
> In imfill>check_locations at 305
  In imfill>parse_inputs at 266
  In imfill at 124
  In beispiel at 16
 


Das Programm schafft es nur, die zwei linken Kreise zu löschen, danach bricht es ab. kann mir einer sagen warum? Die Centroids liegen doch alle eindeutig im Bild. Warum bekomme ich diese Warnung?

Wenn ich
Code:

test=~imfill(~IMGBW,[247 72]);figure;imshow(test)
 

ausführe, bekomme ich die selbe Fehlermeldung, aber wenn ich mittels
Code:

[test,loc]=~imfill(~IMGBW);figure;imshow(test)
 

exakt das selbe Pixel mit der Maus auswähle, funktioniert es einwandfrei. Question


(Ein anderes Problem habe ich mit einem anderen Bild, wo imfill einfach GAR nicht funktioniert. Es werden einfach gar keine Flächen gefüllt. An dem Problem arbeite ich aber noch... vll komme ich noch dahinter, mal sehen...)
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Buhmann
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 30
Anmeldedatum: 25.05.11
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 01.06.2012, 23:20     Titel:
  Antworten mit Zitat      
OK, zum letzten Punkt:
Code:

test=~imfill(~IMGBW,[247 72]);
 

funktioniert wie gesagt nicht. Das liegt aber wohl mal wieder an dem Unterschied zwischen Matrizen"achsen" und Bild-Koordinaten-Achsen.
Wenn ich den Punkt manuell anklicke, gibt imfill den Index 60329 zurück. Und das ist nicht 72*[bildbreite]+247, sondern vielmehr 247*[bildhöhe]+72.

Daher bin darauf gekommen, dass es im Gegensatz zu oben heißen muss:
Code:

test=~imfill(~IMGBW,[72 247]);
 

Dass die beiden linken Kreisflächen gefüllt wurden, lag einfach daran, dass die umgedrehten Koordinaten einfach auf der jeweils anderen Fläche lagen.

Somit wäre dann auch erstmal die Fehlermeldung erklärt...
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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 - 2024 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.