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

> rechteckigen Bildausschnitt erzeugen ??

 

stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2013, 13:37     Titel: > rechteckigen Bildausschnitt erzeugen ??
  Antworten mit Zitat      
Halloo User-Gemeinde,
halloo Admins,

ich möchte ein rechteckigen , gern in der Mitte plazierten Bildausschnitt generieren ...
Habe als Vorlage nur folgendes Script ... welches kreisförmig
ausschneidet ....
(% das Pepper müßt in jedem Matlab liegen)

Code:

B = imread('peppers.png');              
image(B)
ax = axis                                    
pause(1)
% ::::::::::::::::::::
x0 = ax(2)/2;                      % möglicher Mittelpkt.
y0 = ax(4)/2;
rr = (y0-0)^2;                      % Radius
% :::::::::::::::::::::::::::::::::::::::.
[x,y] = meshgrid(1:size(B,2),1:size(B,1));    % Netz über Image
dd = (x-x0).^2+(y-y0).^2;                         % Pythagoras , aber wozu genau ?
% ::::::::::::::::::::::::::::::::::::
axis equal
imwrite(B,'Kreis_Pepper.png','Alpha',double(dd<rr));
 

Ich muß zugeben , daß ich das mit der Alpha-Transpareny und der Programmierung mit double(dd<rr ) nicht voll verstehe ...

Was soll bitte das double bewirken ??? , das kenne ich nur bei der Umwandlung von Strings ... und Numerische Zahlen ...

Anstatt rr als Radius oder dd via Pythagoras zu denfinieren, müßte es doch auch gehen, alternativ eine Rechteck-Fläche zu erzeugen, wie
Code:

rr = [x0+(x0+100), y0+(y0+100)]       % oder als "dd"
 

Könnte man dann nicht mit dem logischen "Nicht" , den Alpha - Bereich herausselektieren ??, der dann mit imwrite ausgeschnitten wird ???

Ich hoffe, konnte mich diesmal halbwegs verständlich ausdrücken ...
Danke vorab für eure Zeit & Müh.
grüße
stoxxii


HauNei
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2013, 14:45     Titel:
  Antworten mit Zitat      
Hallo,
du erzeugst ja mit
Code:
B = imread(peppers.png)

eine 3-Dimensionale Matrix,
wenn du nur einen rechteckigen Ausschnit aus diesem Bild benötigst,
kannst du einfach nur diesen Ausschnitt aus der Matrix auswählen und das
ganze dann mit imwrite schreiben.. sieht dann wie folgt aus:
Code:
imwrite(B(300:600,400:800,3),'Kreis_Pepper.png')

vielleicht ist es das was du benötigst, geht aber bestimmt auch auf andere weise.
Grüße

edit: wie das Programm sonst funktioniert, darüber hab ich mir noch keine Gedanken gemacht.
Vielleicht hilft es dir, was ich oben geschrieben hab.
Private Nachricht senden Benutzer-Profile anzeigen
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2013, 18:35     Titel: >>Danke, jo so einfach könnt es gehen
  Antworten mit Zitat      
Halloo Forum-Anfäger,

jo vielen Dank, so einfach kann es wohl sein ? ... Cool

Im Vgl. zum Kreis-Bild-Ausschnitt doch rel. simpler ...

Meine Gedanken waren da wohl umständlicher :
Ich wollte aus dem mit Meshgrid erzeugten Netz - daraus,
ein Rechteck ausschneiden ... Rolling Eyes

grüße
stoxxii
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2013, 08:41     Titel:
  Antworten mit Zitat      
halloo Forum-Anfänger
halloo Admins,

ich reagiere doch noch mal, obwohl ich eine andere Lösung gefunden habe ...:
Die Alpha-Transparency ausgeschnitten und auf =1 gesetzt ...

Code:

A = imread('peppers.png');
image(A)
ax = axis;
% ::::::::::::::::::::
x0 = round(ax(2)/2);
y0 = round(ax(4)/2);
% :::::::::::::::::::::::::::::::::::::::.
Mask = zeros(size(A,1),size(A,2));
Mask(x0-50:350,y0-100:250) = 1;
axis equal
imwrite(A, 'Mask__Pepper.png', 'Alpha', Mask);
 

Die andere weiter oben stehende One-Liner- "imwrite" -Lösung konnte ich nicht verwenden...

Ich hätte allerdings noch eine Format.-Technische Frage zu meiner Lösung :
Könnt ihr mir helfen, das der weiße Rahmen um den erzeugten
rechteckigen Bildauschnitt verschwindet ??? .... Rolling Eyes
oder vom Abstand zum Bildrand hin kleiner wird ???

Vielen Dank für Tips vorab...
beste grüße
stoxxii
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 21.08.2013, 09:03     Titel:
  Antworten mit Zitat      
Moin stoxxii,

das sieht aus meiner Sicht ein bischen durcheinander aus. Wenn du das Bild nach imwrite wieder öffnest sieht es doch anders aus als dargestellt und die vermutlich erzeugt Transparenz mit Alpha + Mask ist nicht vorhanden, Dafür brauchst du NaN-Werte, die nicht vorhanden sind.

Wie man einen einfachen Bildausschnitt macht hat HauNei beschrieben. Was ist daran falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2013, 19:06     Titel: >> Bildauschnitt bei image
  Antworten mit Zitat      
Halloo Forummeister,

ich denke, ich hatte keine Reaktion in meinem Matlab 6.5 Version, als
ich den One-Liner von HauNei verwendet hatte ...

Ich werde es nochmal ausprobieren .... Vielleicht habe ich etwas falsch gemacht ...

Hättest du vielleicht noch eine andere Option, wie man die Matrix-Bildpunkte
eines mit Imread eingelesenen Bildes ausschneiden könnte , ausselektieren könnte ??

oder könnte man auch via "imagesc(X)" ( X-Matrix) einen Bildauschnitt gestalten und speichern ???

grüße
stoxxii
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 23.08.2013, 06:17     Titel:
  Antworten mit Zitat      
Moin stoxxii,

es gibt 2 grundsätzliche Unterschiede. Du kannst den gewünschten Bereich in einem Bild ausschneiden oder einen nicht erwünschten Bereich entfernen. Letzteres ist bei deinem Beispiel einfacher:

Code:
I=imread('cameraman.tif');
I([1:50],:)=[];    % entfernt die obersten 50 Zeilen


Dein Bild ist jetzt um 50 Zeilen kleiner, das musst du im nächsten Schritt berücksichtigen!

Code:
I(150:206],:)=[]
imshow(I)


Du entfernst also die Zeilen 150 bis zum Schluß, der jetzt 206 ist. Wenn es sich um ein Farbbild handelt, musst den Befehl um den Farbanteil erweitern. Das heißt dann:

Code:
I([1:50],:,:)=[];


Für bildlichen Darstellungen würde ich imagesc nicht anwenden. Ich finde diesen Befehl sehr oft deplatziert und auch nervig. Ein quadr. Bild wird dann als rechteckiges Bild angezeigt und wenn du die oben genannten Befehle auf die Variable z.B. nach "load" anwendest, wird das Bild verzerrt

Ein sonniges Wochenende!
Private Nachricht senden Benutzer-Profile anzeigen
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2013, 12:31     Titel: > nun Error bei HauNai - Vorlage entdeckt ...
  Antworten mit Zitat      
Halloo Forummeister,
halloo HauNei,

danke nochmal für Euro Tips & Tricks ...
Wollte aber nur informativ den kleinen Programm-Error
bei der One-Liner-Solution mit imwrite anzeigen : Wink
richtig muß sein :
Code:

imwrite(B(100:200, 200:300, : ), 'SpaasImage.png')
 

ich brauchte den Doppel-Pkt.Operator !!
so war nicht ganz korrekt
Code:

imwrite(B(300:600,400:800,3),'Kreis_Pepper.png')
 


ich konnte trotz meiner andauernden Zahnschmerzen
nun 2 Möglichkeiten für das rechteckige Auschneiden, umsetzen...
Also die von HauNei und die mit Alpha-Data-Transparency-Matrix ....

Das aktuelle von Dir Forummeister, muß ich erst noch verdauen ...

ansonsten euch schönes Wochenende
beste grüße
stoxxii
 
HauNei
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2013, 12:49     Titel:
  Antworten mit Zitat      
Hallo stoxxi,
danke für keine korrektur,
eigentlich hätte es mir auffallen müssen, isses mir aber irgendwie nicht,
dass ich dir nicht das korrekte geschrieben hab Sad
Viele Grüße
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.