GNU Octave Bildbearbeitungseinführung

GNU Octave ist ein numerisches Softwarepaket, mit dem schnell und einfach numerische Probleme gelöst werden können. Auf dieser Seite folgt eine Einführung und ein Beispiel der Bildverarbeitung zum Erkennen von Kreisen mit der Hough-Transformation. Zunächst muss GNU Octave von der Download-Seite heruntergeladen werden.

Einführung

In der Zip-Datei octave_bildverarbeitung.zip (27 kB) finden sich die Beispiel-Dateien. Die Datei "grundlagen.m" ist bespielsweise mit GUI Octave zu öffnen und auszuführen.


clear all; close all;
% Fensterinhalt: Editor, Workspace, History, Console

%% Variablen
% Variable erstellen: Skalar
a = 2;

% Variable erstellen: Vektor, auch mit Fliesskommazahlen
b = [1 2.2 3.66];

% Text in Variable schreiben, ueberschreibe bestehende Variable
b = 'text';

% Variable erstellen: Matrix
c = [1 2 3; 4 5 6];

% Ausgabe in der Console anzeigen, indem das ";" am Ende der Zeile ausgelassen wird
d = [1 2 3; 4 5 6; 7 8 9]

% :-Operator zum Erzeugen von Folgen
e = 1:10;

% :-Operator mit unterschiedlicher Schrittweite
f = 1:4:40;

% lesender Zugriff auf Elemente von Matrizen
d(1,2);

% schreibender Zugriff auf Elemente von Matrizen
d(1,2) = d(1,2)*100;

% eine ganze Zeile auswaehlen mit dem :-Operator
d(1,:);

% eine ganze Spalte auswaehlen mit dem :-Operator
d(:,1);

% eine Submatrix erstellen: zweite bis dritte Zeile, erste bis zweite Spalte
d_sub = d(2:end,1:2);

%%Grundrechenarten
% Matrix multiplzieren
g = 2*d;

% Matrix subtrahieren
h = d-10;

% Plotten
i=-pi:0.1:pi;
j = sin(i);
plot(i,j);

% Schleife, um Vektor aufzubauen, mit disp Variable anzeigen
for k=1:10
	l(k) = k*2;
end
disp(l)

% Bild einlesen
[bild] = double(imread('kreise03.png'));

% Umwandeln des RGBA-Bildes in Graustufen
bild_grau = rgb2gray(bild);

% Tiefpass auf Bild anwenden, um Kanten abzurunden
fltr4img = [1 1 1; 1 2 1; 1 1 1];
fltr4img = fltr4img / sum(fltr4img(:));
bild_grau = filter2(fltr4img , bild_grau);

% Bild anzeigen (plotten)
imagesc(bild_grau); colorbar;

% Histogramm des Bildes anzeigen
figure; hist(reshape(bild_grau,1,[]));

 % Hough-Transformation zum Finden von Kreisen
[accum, circen, cirrad] = CircularHough_Grd(bild_grau, [40 120]);

% Plotten der accumulator-Matrix
figure; imagesc(accum); axis image;

% Plotte die erkannten Kreis mit Mittelpunkten
figure; imagesc(bild_grau); colormap('gray'); axis image;
hold on;
plot(circen(:,1), circen(:,2), 'r+','LineWidth',2);
for k = 1 : size(circen, 1),
 DrawCircle(circen(k,1), circen(k,2), cirrad(k), 32, 'b-');
end
hold off;