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 (22 kB) finden sich die Beispiel-Dateien. Die Datei "grundlagen.m" ist bespielsweise mit Octave zu öffnen und auszuführen. Im Folgenden ist der Inhalt dargestellt:


% lösche alle Variablen und schließe alle Bilder
clear all; close all;

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

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

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

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

% Ausgabe in der Konsole 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 4
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 auswählen mit dem :-Operator
d(1,:);

% eine ganze Spalte auswählen 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 und
% am Schluß 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,[]));

% lade gleich nötige Octave-Pakete,
% diese Befehle sind nicht mit MATLAB kompatibel
if(exist('OCTAVE_VERSION', 'builtin') ~= 0)
  pkg load image signal;
end

% 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 Kreise 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;