Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorial:image

Dies ist eine alte Version des Dokuments!


Dieses Tutorial befindet sich noch im Aufbau. Mehr zum Projekt auf https://github.com/luxeria/foip

Einführung in die Bildverarbeitung mit GNU Octave

In diesem Artikel sollen die grundlegenden Operationen der Bilderverarbeitung mit Octave zusammengefasst werden.

Installation

Die Installation von GNU Octave erfolgt bei Unixoiden Systemen über den Paketmanager und kann direkt per Kommandozeile erfolgen. Hier das Beispiel für den Paketmanager pacman von Archlinux

sudo pacman -S octave

und aptitude von Ubuntu (Debian)

sudo apt-get install octave

Für die Verwendung vom image Pakets muss Octave ab Version 4 installiert werden. Für Archlinux gibt es Octave ab Version 4 derzeit nur im AUR

Erweiterungen

Die Instalation von Erweiterungen von Octave kann direkt aus der Kommandozeile von Octave erfolgen. Hierzu kann entweder das gewünschte Softwarepaket manuell lokal heruntergeladen und danach installiert werden oder direkt aus der Datenbank bezogen und installiert werden durch Octave.

pkg install -forge image

Ist eine solche Erweiterung installiert wird diese nicht automatisch geladen wenn eine neue Octave session eröffnet wird, sondern muss manuell geladen werden.

pkg load image

Bei der Verwendung von vielen Erweiterungen können auch sämtliche mit der Angabe all geladen werden.

pkg load all

Daten laden und speichern

Einstieg in jegliche Bildverarbeitung ist das Einlesen der Bilddaten und auch deren Speicherung. Im einfachsten Fall kann der Prozess in drei Teile gegliedert werden:

  1. Originaldatei einlesen
  2. Manipulation
  3. Manipulierte Daten ablegen

Graustufenbilder

Diese drei elementaren Schritte sind hier mit den beiden Funktionen imread() und imwrite() des image package ein einem Pseudobeispiel dargestellt:

I = imread("input_image.png");		% read image
J = my_image_processing(I);		% manipulate image
imwrite(J, "output_image.png");		% write image

Durch die Verwendung von imread() auf Graustufenbilder wird die Grafik in eine entsprechende Matrix gespeichert mit den Pixelwerten. Diese kann per imshow() betrachtet werden.

RGB Dateien

Beim Einlesen von Graustufenbildern sind die Pixelwerte direkt in einer 2D Matrix ableget. Beim Einlesen von RGB-Bildern wird die Grafik in eine mehrschichtige 2D Matrix ableget, wobei jede Matrix die Pixelwerte für eine Farbe enthält. Die einzelnen Matrizen können wiederum als Graustufenbilder behandelt werden. Im Folgenden wird das Zerlegen eines RGB-Bildes in die einzelnen Farblayer aufgezeigt.

Image = imread("input_rgb_image.png");	% read the RGB image
 
Red   = Image(:,:,1);			% extract red layer
Green = Image(:,:,2);			% extract green layer
Blue  = Image(:,:,3);			% extract blue layer

Alternativ kann das GRB Bild auch direkt umgewandelt werden in ein Graustufenbild mittels rgb2gray().

ImageRGB  = imread("image_rgb.png");
ImageGray = rgb2gray(ImageRGB);
imwrite(ImageGray, "image_gray.png");

Beispiel 1

Das folgende Beispiel 1 liest eine RGB Bildatei ein und wandelt diese in ein Graustufenbild um. Die beiden Bilder werden in einem Plot gegenübergestellt und das neu erstellte Graustugenbild gespichert.

ImageOrig = imread(imageSource);
 
% convert the RGB image to a grayscale image
ImageGray = rgb2gray(ImageOrig);
 
% show the two images
figure(1);		
 
subplot(1,2,1);
imshow(ImageOrig);
title("Original RGB Image");
 
 
 
subplot(1,2,2);
imshow(ImageGray);
title("Converted Grayscale Image");
 
% save the grayscale image
imwrite(ImageGray, "building_gray.jpg");

Pixel lesen und schreiben

Geladene Bilder sind in Octave einfache 2D Arrays bzw. Matrizen und können auch wie solche behandelt werden. Eine solche Matrix hat Spalten (x) und Zeilen (y) und wird als folgende Struktur dargestellt

  Image = x1y1  x2y1  x3y1  x4y1 ... xny1
          x1y2  x2y1  x3y2  x4y2 ... xny2
          x1y3  x2y3  x3y3  x4y3 ... xny3
          x1y4  x2y4  x3y4  x4y4 ... xny4
          ...   ...   ...   ...  ...
          x1ym  x2ym  x3ym  x4ym     xnym
          

Beispiel 2

Das Beispiel 2 zeigt wie Zeilen aus einem Bild gelesen werden. Diese Zeilen werden dann im einem Plot jeweils dargestellt.

% load the image
Image = imread(imageSource);
 
% get the size of the image
[sy, sx] = size(Image);
 
% define pixel lines to read from
redLine   = floor(1*sy/10);
greenLine = floor(5*sy/10);
blueLine  = floor(9*sy/10);
 
% extract pixel data
redPixels   = Image(redLine,:);
greenPixels = Image(greenLine,:);
bluePixels  = Image(blueLine,:);

Statistik

Für die Behandlung von Bilddaten sind statistische Auswertungen ein grundlegendes Werkzeug. Im folgenen sollen einige Grundbegriffe kurz erläutert werden.

Absolutes Auftreten

Nimmt man ein Graustufenbild und zählt für jeden Grauwert wie viele Pixel diesen Wert haben, dann erhält man damit das absolute Auftreten der Grauwerte. Mit diesem 'Zählen' erhält man eine Basis für weitere Auswertungen. Um ein Bild auf das absolute Auftreten von Grauwerten zu untersuchen gibt es die Funktion imhist().

[count, value] = imhist(Image);
tutorial/image.1437917117.txt.gz · Zuletzt geändert: 2015/07/26 13:25 von ninux

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki