Modellbildung und Simulation - Grundlagen der Bildverarbeitung
| Autor: | Prof. Dr.-Ing. Schneider |
| Termin: | 06.06.2025 |
Aufgabe 10.1
Erzeugen Sie ein bmp-Bild-Array mit 3 Zeilen und 8 Spalten, das einen waagrechten blauen Strich enthält, und geben Sie diese Daten mit der image-Funktion aus.
Versuchen Sie, andere geometrische Figuren in unterschiedlichen Farben zu erzeugen.
| Musterlösung 10.1 |
% Aufgabe 10.1: verschiedene bmp-Bilder
% bmpFiguren()
function bmpFiguren()
figure;
% Strich:
% weisse Zeile
a1( 1, 1:8, 1:3 ) = 255;
% blaue Zeile
a1( 2, 1:8, 1:2 ) = 0;
a1( 2, 1:8, 3 ) = 255;
% weisse Zeile
a1( 3, 1:8, 1:3 ) = 255;
% Ausgabe
subplot( 2, 1, 1 ),
image( uint8(a1) ); axis image;
% Rechteck, farbig
% roter Rand (bzw. alles erst mal Rot)
a2( 1:4, 1:10, 1 ) = 255;
a2( 1:4, 1:10, 2:3 ) = 0;
% gelbes Inneres (³berschreibt dort das Rot)
a2( 2:3, 2:9, 1:2 ) = 255;
a2( 2:3, 2:9, 3 ) = 0;
% Ausgabe
subplot( 2, 1, 2 ),
image( uint8(a2) ); axis image;
end
|
Aufgabe 10.2
Schreiben Sie eine Funktion, die ein RGB-Bild mit 255 Zeilen und 255 Spalten erzeugt, also mit exakt 255x255 Pixeln, wobei der Rot-Wert eines Pixels P(z,s) den Wert z der Zeile hat, der Grün-Wert den Wert s der Spalte und der Blau-Wert für alle Pixel 100 ist.
| Musterlösung 10.2 |
%
% createImage erzeugt ein RGB-Bild mit 255 Zeilen und 255 Spalten,
% also mit exakt 255x255 Pixeln, wobei der Rot-Wert eines Pixels P(z,s)
% den Wert z der Zeile hat, der Gr³n-Wert den Wert s der Spalte und
% der Blau-Wert f³r alle Pixel 100 ist.
%
function createImage()
% Array vorbelegen, bringt Geschwindigkeitsvorteil
A( 1:255, 1:255, 1:3 ) = 0;
% alle Zeilen und Spalten definieren
for( z=1:255 )
for( s=1:255 )
A(z,s,1) = z; % Rot-Wert
A(z,s,2) = s; % Gr³n-Wert
A(z,s,3) = 100; % Blau-Wert
end
end
% Daten in uint8 wandeln, zur Sicherheit
A = uint8(A);
% Bild anzeigen
image( uint8(A) );
axis image;
% Dateinamen zum Speichern holen
[f,p] = uiputfile( 'createImage.bmp' );
if( f == 0 )
return;
end
% Dateinamen aus Pfad p und File-Namen f zusammenbauen
datei = [p,f];
% Daten abspeichern
imwrite( A, datei )
end
|
Aufgabe 10.3
Schreiben Sie eine Funktion, mit der man die Helligkeit eines bmp-Bildes variieren kann. Ändern Sie dazu die drei Farbkanäle jeweils um exakt denselben Prozentsatz.
Wie sieht das Bild aus, wenn Sie anstelle einer prozentualen Änderung die Farbkanäle um jeweils einen identischen festen Wert abwandeln?
Beispielbild: Katze.jpg
| Musterlösung 10.3 |
% Aufgabe 10.3: verändert die Helligkeit von bmp-Bildern
% helligkeit( A )
% A : übergebenes bmp-Array, z.B. von Katze.jpg, Typ uint8
% proz : prozentuale Hellikeitsänderung
% Beispielaufruf:
% >> A = imread( 'Katze.bmp' );
% >> helligkeit( A, -20 );
function helligkeit( A, proz )
figure;
% links das Original anzeigen
subplot(1,2,1)
image( A );
axis image
% geändertes Bild
subplot(1,2,2)
% zum Rechnen A von uint8 nach double wandeln
% Bild von 100% auf (100+proz)% abõndern
% f³r alle Pixel und alle 3 Farbkanõle B(:,:,:)
B = double( A ) * ( 100.0 + proz ) / 100.0;
% vor dem Zeichnen wieder in das Format uint8 wandeln
image( uint8(B) );
axis image
end
|
Aufgabe 10.4
Schreiben Sie eine Funktion B = verkleinern(file). Diese Funktion lädt das Bild A aus der bmp-Datei file und berechnet daraus ein verkleinertes Bild B in der Art, dass B nur noch die Hälfte der Zeilen und die Hälfte der Spalten des Ursprungsbildes
A besitzt. Die Farbwerte eines Pixels von B sind definiert als die Mittelwerte aus den vier Pixeln, die um eine Position P = (z,s) liegen, also aus dem Pixel A(z,s,:) und den drei vorherigen Pixeln A(z-1,s,:), A(z,s-1,:) und A(z-1,s-1,:). Das berechnete
Bild B wird zurückgegeben.
| Musterlösung 10.4 |
%
% >> B = verkleinern( 'Katze.bmp' );
% >> image( B ); axis image
%
function B = verkleinern( file )
A = imread( file );
sz = size( A );
D = double(A);
for( z = 1: sz(1)/2 )
for( s = 1: sz(2)/2 )
B(z,s,:) = uint8( ( D(2*z,2*s,:) + D(2*z-1,2*s,:) + ...
D(2*z,2*s-1,:) + D(2*z-1,2*s-1,:) ) / 4.0 );
end
end
end
|
Aufgabe 10.5
Schreiben Sie ein Matlab Skript, in dem Sie folgende Aufgaben bewältigen:
- Lesen Sie das Bild
lena_std.pngein, indem Sie dies zunächst direkt über die Eingabe eines Pfades und anschließend über einen interaktiven Dialog vollziehen und ermitteln Sie die Größe des Bildes (Befehle:imread(), uigetfile()) - Erzeugen Sie eine Ausgabe, in der die einzelnen Farbräume (R, G und B) und das Originalbild nebeneinander dargestellt werden und Erzeugen Sie zu jedem Bild ein Titel (Befehle:
imshow(), subplot()) - Erzeugen Sie aus dem Bild eine Grauwertbild (Befehle:
rgb2gray()) - Geben Sie das Grauwertbild in einem neuen Fenster aus
- Lesen Sie interaktiv aus dem Grauwertbild mit einem Fadenkreuz einen Pixel aus und geben Sie Pixelposition (x,y) und den Grauwert im Matlab Command Window aus (Befehle:
ginput(), num2str(), disp()) - Speichern Sie das Grauwertbild als Bilddatei ab (Befehle:
imwrite())
| Musterlösung 10.5 |
Aufgabe 10.6
| Musterlösung 10.6 |
Aufgabe 10.7
| Musterlösung 10.7 |
→ zurück zum Hauptartikel: BSE Modellierung und Simulation - SoSe25