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

Bild in n gleiche Bereiche unterteilen

 

MariusD
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2015, 17:02     Titel: Bild in n gleiche Bereiche unterteilen
  Antworten mit Zitat      
Hallo zusammen,

ich kommen mit meinen bescheidenen MatLab Fähigkeiten gerade leider an meine Grenzen und bräuchte eure Hilfe. Ich habe in Matlab mit der Image Processing Toolbox ein bmp Bild importiert und dieses in ein Graustufenbild umgewandelt. Jetzt möchte ich als nächstes das Bild in n (beliebige Anzahl) gleichgroße Bereiche unterteilen. Die Anzahl hole ich mir über eine Eingabe vom Nutzer (prompt....).
Anschließend sollen die n Bereiche visuell dargestellt werden und für eine weitere Bearbeitung zur Verfügung stehen. Konkret möchte ich danach die einzelnen Bereiche binarisieren (schwarz und weiß) und anschließend die Anzahl der weißen Pixel im Verhältnis zu den Gesamtpixeln pro Bereich erfassen.

Mein Problem liegt jetzt in dem Schritt, bei dem das importierte Bild in n Bereiche unterteilt werden soll und zum weiterarbeiten bereitgestellt wird.

Wie kann ich dies in Matlab realisieren?

Hier mal ein Ausschnitt des Programms:
Code:
% Öffnen des Bitmap Bildes (.bmp) über Userinterface
[filename, pathname] = uigetfile({'*.bmp'});
    % Umwandlung des Bildes in ein Graustufenbild abhängig vom Farbtyp
    fullFilename = [pathname filename];
    info = imfinfo(fullFilename);
  if(strcmp('truecolor',info.ColorType))
        I = imread(fullFilename);
        Graustufenbild = uint8(rgb2gray(I));
        clear I
     elseif(strcmp('grayscale',info.ColorType))
         Graustufenbild = uint8(imread(fullFilename));
     elseif(strcmp('indexed',info.ColorType))
         [I,map] = imread(fullFilename);
         Graustufenbild = uint8(ind2gray(I,map));
         clear I map
     else
         error('statPart:FormatImage','Image format error');
     end
     clear info
     
 % Abfrage nach Anzahl der Unterteilungen in Dialogfenster
       prompt = {'In wieviele Segmente soll das Bild unterteilt werden?'};
         dialog2 = 'Input';
         answer2 = inputdlg(prompt,dialog2);
         Unterteilung = str2double(answer2);
         close all;
% Unterteilung des Bildes


Vielen Dank im Vorraus!
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 07.12.2015, 17:07     Titel:
  Antworten mit Zitat      
die für anfänger übersichtlichste lösung sollte mit einer for schleife zu erreichen sein. mat2cell wäre auch eine möglichkeit denke ich.
was soll passieren wenn scih deine pixelzahl nicht ganzzahlig durch n teilen lässt? das musst du auch berücksichtigen. welche form sollen die bereiche haben? das hast du auch nicht gesagt.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
MariusD
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2015, 17:22     Titel:
  Antworten mit Zitat      
Danke für deine schnelle Rückmeldung. Das mit der Pixelzahl hatte ich mir in der Tat noch nicht überlegt. Ob jetzt ein Bereich einen Pixel mehr hat als der andere ist mir im Prinzip egal, nur wie das umgesetzt werden kann, weiß ich auch nicht. Ich bin von der Variante mit einer 3er Einteilung gekommen und wollte das Ganze jetzt weiter individualisieren:
Code:
[n,m]=size(Graustufenbild)  
 id=fix(n/Unterteilung)
 im1=Graustufenbild(1:id,:);
 im2=Graustufenbild(id+1:2*id,:);
 im3=Graustufenbild(2*id+1:n,:);
 
 subplot(3,1,1); imshow(im1)
 subplot(3,1,2); imshow(im2)
 subplot(3,1,3); imshow(im3)
 


Die Bereiche sollten Rechteckig sein. Mehr Einschränkungen habe ich nicht bei der Form.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 07.12.2015, 17:29     Titel:
  Antworten mit Zitat      
du gehst als von (n-1)*id+1 bis n*id
das siht doch so aus als lasse sich das in eine schleife packen Smile
Zitat:
Code:
im3=Graustufenbild

hier versteckst du den index 3 im variablen namen. das solltest du dir garnicht erst angewöhnen Smile das ist sehr schlecht. ein index sollte auch immer als index benutzt werden. alle deine matritzen sind gleich groß. du kannst sie also in einer matrix speichern... das ist dann wieder dein original bild Smile du könntest auch cells benutzen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
MariusD
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2015, 11:20     Titel:
  Antworten mit Zitat      
ich habe es mal versucht zu probieren wie du es vorgeschlagen hast:

Code:
[n,m]=size(Graustufenbild)  
 id=fix(n/Unterteilung)
 im=cell(Unterteilung, 1)
 
 for i = 1:1:Unterteilung
      im{i} = Graustufenbild((i-1)*id+1:i*id,:);
end;
 
im
cellplot(im)


Als Ergebniss für Unterteilung=5 bekomme ich:
Code:
im =

    [291x258 uint8]
    [291x258 uint8]
    [291x258 uint8]
    [291x258 uint8]
    [291x258 uint8]


Wie kann ich mir denn jetzt die einzelnen Teilbereiche, also die 5 Einzelbilder wieder optisch anzeigen lassen? Sodass ich am Ende das Ursprungsbild in 5 Einzelteilen habe?
Private Nachricht senden Benutzer-Profile anzeigen
 
MariusD
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2015, 12:29     Titel:
  Antworten mit Zitat      
Meine Frage hat sich inzwischen erledigt.
Private Nachricht senden Benutzer-Profile anzeigen
 
MariusD
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2015, 13:05     Titel:
  Antworten mit Zitat      
Jetzt habe ich ein neues Problem. Ich möchte meine Ergebnisse jetzt noch in einem Fenster plotten auf folgende Art und Weise:

Code:

subplot(Unterteilung,3,[i*3-2]);imshow(Graustufenbild)
     subplot(Unterteilung,3,3*i-1);imshow(im{i}), title(['Bereich:',num2str(i)])
     subplot(Unterteilung,3,3*i);imshow(SW{i}),




Ich bekomme auch alles richtig angezeigt, nur möchte ich in der ersten Spalte das Graustufenbild über alle "Untertelung" Zeilen strecken. Am Ende möchte ich in einem Fenster auf der linken Seite von oben bis unten gestreckt ein Bild haben und in den zwei weiteren Spalten rechts davon jeweils die Einzelbilder untereinander so wie sie aktuell schon angezeigt werden.

Wie muss ich den ersten Subplot umschreiben, damit sich das Bild von oben nach unten streckt?

Und ist es möglich einen Input dialog (prompt) als Subplot zu den anderen zu integrieren?
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 - 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.