MATLAB Repetitorium - Bildverarbeitung: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Kategorie:MATLAB {| class="wikitable" |- | '''Autor:''' || Prof. Dr.-Ing. Schneider |- | '''Termin:''' || 05.07.2024 |} == Aufgabe 7.1 - Bilder einlesen und anzeigen == Lesen Sie das Bild „lena_std.png“ ein, 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()) b) Erzeugen S…“)
 
 
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 6: Zeile 6:
| '''Termin:''' || 05.07.2024
| '''Termin:''' || 05.07.2024
|}
|}
== Aufgabe 7.1 - Bilder einlesen und anzeigen ==
== Aufgabe 7.1: Bilder einlesen und anzeigen ==
Lesen Sie das Bild „lena_std.png“ ein, 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())
[[Datei:Lena std.png|thumb|rigth|200px|Abb. 1: Lena std.png]]
b) 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())
#Lesen Sie das Bild „lena_std.png“ ein, 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: <code>imread(), uigetfile()</code>).
c) Erzeugen Sie aus dem Bild eine Grauwertbild (Befehle: rgb2gray())
# 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: <code>imshow(), subplot()</code>)
d) Geben Sie das Grauwertbild in einem neuen Fenster aus
# Geben Sie das Grauwertbild in einem neuen Fenster aus.
e) 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())
#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: <code>ginput(), num2str(), disp()</code>)
f) Speichern Sie das Grauwertbild als Bilddatei ab (Befehle: imwrite())
#Speichern Sie das Grauwertbild als Bilddatei ab (Befehl: <code>imwrite()</code>).


Notwendige Datei:  
'''Notwendige Datei:''' [[Medium:Lena std.png|Lena std.png]]


'''Nützliche Befehle:''' [https://de.mathworks.com/help/matlab/ref/disp.html <code>disp</code>], fprintf
'''Nützliche Befehle:''' <code>imread(), uigetfile()</code>,<code>imshow(), subplot()</code>,<code>ginput(), num2str(), disp()</code>, <code>imwrite()</code>


{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung 4.6&thinsp;</strong>
| <strong>Musterlösung 7.1&thinsp;</strong>
|-
|-
| <source line lang="matlab" style="font-size:medium">%% Aufgabe 4.6 - Systematische Programmierung
| <source line lang="matlab" style="font-size:medium">%% Aufgabe 7.1 - Bilder einlesen und anzeigen
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Workspace reinigen
%                                                                        %                                                                     
clear all; close all; clc
% Funktion        : Framework                                            %
%                                                                        %
%                                                                        %
% Eingabe        : /                                                    %
%                                                                        %
%                                                                        %
% Ausgabe        : /                                                    %
%                                                                        %
%                                                                        %
% Autor          : Erika Musterfrau                                      %
%                                                                        %
% Implementation  : MATLAB R2016b                                        %
%                                                                        %
% Bemerkung      :                                                      %
%                                                                        %
% Änderungsdatum  : 09.03.2017                                            %
%                                                                        %
% Erstelldatum    : 09.03.2017                                            %
%                                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% Matlab initialisiern
%% Teil 1: Bilder einlesen und ausgeben
clear all;
close all;
clc;


%% Initialisierung von Variablen/Konstanten
%% a)
disp('Starte Initialisierung');


[filename, path] = uigetfile('*.png');


%Hier kommt die Initialisierung hin
readImage = [path, filename];


image = imread(readImage);


disp('Initialisation erfolgreich');
%% b)  
fprintf('\n');


%% Simulationsschleife/Algorithmus
figure
disp('Programmstart');


subplot(2, 2, 1);
imshow(image);
title(filename);


%Hier kommen die Berechnungen hin
subplot(2, 2, 2);
imshow(image(:,:,1));
title('Rotanteil');


subplot(2, 2, 3);
imshow(image(:,:,2));
title('Grünanteil');


disp('Berechnung beendet');
subplot(2, 2, 4);
fprintf('\n');
imshow(image(:,:,3));
title('Blauanteil');


%% Plots/Ausgabe
%% c)
figure(1);


%Hier kommen die Ausgabe hin
grayImage = rgb2gray(image);


%% Fenster schließen
%% d)
close 1
 
figure
imshow(grayImage);
title('Grautwertbild');
hold on
 
%% e)
 
[x, y] = ginput(1);
plot(x, y, 'rx');
hold off
 
x = uint16(x);
y = uint16(y);
 
    % Runden der Werte, alternativ: round()
 
grayValue = grayImage(x, y);
 
fprintf(['Der ausgelesene Grauwert ist: ', num2str(grayValue), '\n']);
fprintf(['Die zugehörige Position ist: ', num2str(x),', ', num2str(y), ' (x, y)\n']);
 
%% f)
 
imwrite(grayImage, 'Lena_Grauwertbild.png');
 
%% Teil 2: Bildverarbeitung
 
%% a)
 
[filename, path] = uigetfile('*.tif');
 
readImage = [path, filename];
 
NoiseImage = imread(readImage);
 
figure
subplot(1, 4, 1);
imshow(NoiseImage);
title('Verrauschtes Bild');
 
%% b)
 
% Filter für die Bildverarbeitung:
% https://de.mathworks.com/help/images/referencelist.html?type=function&category=linear-filtering&s_tid=CRUX_topnav
 
%% c)
 
% Zweidimensionaler Median-Filter
 
medianSize = [3, 3];
 
medianFilter = medfilt2(NoiseImage, medianSize);
 
subplot(1, 4, 2);
imshow(medianFilter);
title(['Median-Filter mit ', num2str(medianSize(1)), 'x', num2str(medianSize(2)), ' Pixelnachbarschaft']);
 
% Gauss-Filter
 
sigma = 0.8;
 
gaussFilter = imgaussfilt(NoiseImage, sigma);
 
subplot(1, 4, 3);
imshow(gaussFilter);
title(['Gauss-Filter mit \sigma = ', num2str(sigma)]);
 
% Tiefpass Wiener-Filter
 
wienerSize = [3, 3];
 
wienerFilter = wiener2(NoiseImage, wienerSize);
 
subplot(1, 4, 4);
imshow(wienerFilter);
title(['Wiener-Filter mit einer ', num2str(wienerSize(1)), 'x', num2str(wienerSize(2)), ' Pixelnachbarschaft']);
 
%% d)
 
[Datei, Pfad] = uigetfile('*.png');
 
Ente = imread([Pfad, Datei]);
 
figure
subplot(2, 1, 1);
imshow(Ente);
title('Foto einer Ente');
 
%% e)
 
[x, y] = ginput(2);
 
x = uint16(x);
y = uint16(y);
 
% Notwendige Abfrage aufgrund der Reihenfolge der eingelesenen Punkte mit
% ginput(). Außerdem sind x- und y-Werte bei der Bildverarbeitung und der
% normalen figure Darstellung vertauscht!
 
if (y(1) < y(2)) && (x(1) < x(2))
   
    Nummernschild = Ente(y(1):y(2), x(1):x(2));
   
elseif (y(1) < y(2)) && (x(1) > x(2))
   
    Nummernschild = Ente(y(1):y(2), x(2):x(1));
   
elseif (y(1) > y(2)) && (x(1) < x(2))
   
    Nummernschild = Ente(y(2):y(1), x(1):x(2));
   
elseif (y(1) > y(2)) && (x(1) > x(2))
   
    Nummernschild = Ente(y(2):y(1), x(2):x(1));
   
end
 
subplot(2, 1, 2);
imshow(Nummernschild);
title('Nummernschild');
 
%% Teil 3: Segmentierung
 
%% a)
 
% https://de.mathworks.com/help/images/ref/colorthresholder-app.html
 
%% b) c) d) e)
 
% Alle Aufgabenteile werden in der App selbst durchgeführt. Ein
% dokumentiertes Beispiel lässt sich unter
% https://de.mathworks.com/help/images/image-segmentation-using-the-color-thesholder-app.html
% einsehen. Unter Aufgabenteil e) muss in der App unter Export 'Export
% Function' ausgewählt werden. Diese wird dann als MATLAB Funktion
% abgespeichert.
 
 
%% Teil 4: Video einlesen und ausgeben
 
%% a)
 
[filename, path] = uigetfile('*.mpeg');
 
video = VideoReader([path, filename]);
 
%% b)
 
nFrames = video.NumFrames;
 
FrameRate = video.FrameRate;
 
%% c)
 
figure('Name', 'Ausgabe jedes 5. Frames')
 
for i = 1:(nFrames-1)
   
    image = read(video, i);
   
    if mod(i, 5) == 0
      imshow(image);
    end
   
end
 
%% d)
 
figure('Name', 'Ausgabe jedes 5. Grauwertframes')
 
for j = 1:(nFrames - 1)
   
    image = read(video, j);
   
    if mod(j, 5) == 0
      GrayImage = rgb2gray(image);
      imshow(GrayImage);
    end
   
end
 
% Alternative für c) und d)
%
% for k = 1:5:nFrames
%   
%    image = read(video, k);
%   
%    imshow(image);
%   
% end


</source>
</source>
|}
|}
----
== Aufgabe 7.2: Datenzugriff ==
# Checken Sie den SVN <code>trunk</code> aus (URL: https://svn.hshl.de/svn/MATLAB_Vorkurs/trunk/MATLAB_Repetitorium).
# Wechseln Sie in Ihr Arbeitsverzeichnis (z.&thinsp;B. <code>\MATLAB_Repetitorium\User\SoSe24\Ulrich_Schneider\Lektion_07_Bildverarbeitung\</code>).
# Laden Sie die Bilddatei <code>lena_std.png</code> aus dem Ordner <code>\MATLAB_Repetitorium\Daten</code> '''ohne''' die Datei zu kopieren.
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung 7.2&thinsp;</strong>
|-
| <source line lang="matlab" style="font-size:medium">%% Aufgabe 7.2: Datenzugriff
</source>
|}
----
== Aufgabe 7.3: Videobild extrahieren ==
[[Datei:GeradeInKurve.mp4|thumb|rigth|200px|Abb. 2: Datei:GeradeInKurve.mp4]]
Notwendige Datei: [[Medium:GeradeInKurve.mp4|GeradeInKurve.mp4]]

Aktuelle Version vom 5. Juli 2024, 07:47 Uhr

Autor: Prof. Dr.-Ing. Schneider
Termin: 05.07.2024

Aufgabe 7.1: Bilder einlesen und anzeigen

Abb. 1: Lena std.png
  1. Lesen Sie das Bild „lena_std.png“ ein, 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()).
  2. 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())
  3. Geben Sie das Grauwertbild in einem neuen Fenster aus.
  4. 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())
  5. Speichern Sie das Grauwertbild als Bilddatei ab (Befehl: imwrite()).

Notwendige Datei: Lena std.png

Nützliche Befehle: imread(), uigetfile(),imshow(), subplot(),ginput(), num2str(), disp(), imwrite()


Aufgabe 7.2: Datenzugriff

  1. Checken Sie den SVN trunk aus (URL: https://svn.hshl.de/svn/MATLAB_Vorkurs/trunk/MATLAB_Repetitorium).
  2. Wechseln Sie in Ihr Arbeitsverzeichnis (z. B. \MATLAB_Repetitorium\User\SoSe24\Ulrich_Schneider\Lektion_07_Bildverarbeitung\).
  3. Laden Sie die Bilddatei lena_std.png aus dem Ordner \MATLAB_Repetitorium\Daten ohne die Datei zu kopieren.

Aufgabe 7.3: Videobild extrahieren

Abb. 2: Datei:GeradeInKurve.mp4

Notwendige Datei: GeradeInKurve.mp4