Mischgüte über Bildauswertung bestimmen
1 view (last 30 days)
Show older comments
Hallo, ich hab eine problem mit meinem Code. Dieser soll die Mischgüte anhand einer Bildauswertung vornehmen. Der Code basiert auf der mathematischen Formulierung der Mischgüte M= 1-sqrt(I) wobei I die Entmischungsintensität beschreibt die sich wiederrum aus dem Verhältnis der Varianz des betrachteten Bildes zur maximalen varinaz ergibt.
für die maximale Varinaz habe ich ein Bild der vollständigen entmischung zur vollständigen vermischung gegenübergestellt und von den bildern dann pixelweise eine varinaz erstellt.
Jetzt ist das Problem, dass die Bilder (wurden aus einem Video extrahiert) aufgrund von äußeren Einflüssen in ihrem farbwert schwanken, obwohl sich eigentlich nichts in dem bild verändert. Also es findet keine vermischung oder sowas statt. Das wiederum resultiert darin dass das ergebnis was ich erhalte teilweise negative mischgüten angibt, was laut definition und auch grundlage der logik nicht sein kann. Ich bin echt eine absolute anfängerin und jetzt mit meinem Latein am Ende, ich muss meine Masterabrbei in ein paar tagen abgeben und mit der Auswertung der Bilder steht und fällt alles. Hat jemand eine Idee wie ich das ganze umgehen kann, ich hab es mit einer Toleranz versucht, aber das führt ihrendwie zu nichts.
Code häng ich an, ist aber sicherlich unperfekt.
Beste Grüße
Lisa
% Ordnerpfad angeben
ordnerpfad = 'C:\Users\lisak\Documents\Masterarbeit\Experimente\Ergebnisse\Mischgüte\Excelauswertungen\DiaKel\DiaKel\DiaKel\DiaKel Zelle 2 POCS\VV2';
% Bilder aus dem Ordner laden
bilddateien = dir(fullfile(ordnerpfad, '*.jpg')); % Anpassen der Dateierweiterung, falls erforderlich
% Anzahl der Bilder im Ordner überprüfen
anzahl_bilder = numel(bilddateien);
% Matrix initialisieren
bilder_matrix = cell(anzahl_bilder, 1);
% Koordinaten für Bildausschnitte definieren
x1 = 1075;
y1 = 7;
x2 = 1223;
y2 = 384;
x3 = 48;
y3 = 7;
x4 = 170;
y4 = 384;
% Bilder zuschneiden und in Grauwertbilder umwandeln
for i = 1:anzahl_bilder
bild = imread(fullfile(ordnerpfad, bilddateien(i).name));
grauwertbild = rgb2gray(bild);
ausschnitt1 = grauwertbild(y1:y2, x1:x2);
ausschnitt2 = grauwertbild(y3:y4, x3:x4);
bilder_matrix{i} = {ausschnitt1, ausschnitt2};
end
% Pfad zum Referenzbild, muss gleich bleiben für alle Auswertungen-->
% Stelle die Vollständige Vermischund dar, also den Sollzustand
referenzbild_pfad = 'C:\Users\lisak\Documents\Masterarbeit\Experimente\Ergebnisse\Mischgüte\Ref.jpg';
% Referenzbild laden und in Grauwertbild umwandeln
referenzbild = imread(referenzbild_pfad);
referenz_grauwertbild = rgb2gray(referenzbild);
% Bildausschnitte aus dem Referenzbild zuschneiden
referenz_ausschnitt1 = referenz_grauwertbild(y1:y2, x1:x2);
referenz_ausschnitt2 = referenz_grauwertbild(y3:y4, x3:x4);
% Berechnung der Mischgüte für jedes Bild
entmischungsintensitaeten = zeros(anzahl_bilder, 2);
for i = 1:anzahl_bilder
bild1 = bilder_matrix{i}{1};
bild2 = bilder_matrix{i}{2};
% 1. Varianz der Mischung (Var_mix) für Ausschnitt 1 berechnen
var_mix1 = var(double(bild1(:)) - double(referenz_ausschnitt1(:)));
% 2. Varianz der Mischung (Var_mix) für Ausschnitt 2 berechnen
var_mix2 = var(double(bild2(:)) - double(referenz_ausschnitt2(:)));
%Maximale Varianz
% Pfad zu den beiden Bildern, in Zeile 63 muss einmal dann das erste
% Bild aus dem Auswerungsordner gewählt werden, Pfad von oben Kopieren
% und dann Bilddatei 1 auswählen, Bild2_pfand bleibt immer gleich
bild1_pfad = 'C:\Users\lisak\Documents\Masterarbeit\Experimente\Ergebnisse\Mischgüte\Excelauswertungen\DiaKel\DiaKel\DiaKel\DiaKel Zelle 2 POCS\VV2\Bild_0239.jpg';
bild2_pfad = 'C:\Users\lisak\Documents\Masterarbeit\Experimente\Ergebnisse\Mischgüte\Ref.jpg';
% Bilder hochladen
bild1 = imread(bild1_pfad);
bild2 = imread(bild2_pfad);
% Bilder in Grauwertbilder umwandeln
grau_bild1 = rgb2gray(bild1);
grau_bild2 = rgb2gray(bild2);
% Koordinaten für Bildausschnitte definieren
x1 = 1075;
y1 = 7;
x2 = 1223;
y2 = 384;
x3 = 48;
y3 = 7;
x4 = 170;
y4 = 384;
% Überprüfen der Bildgröße
bild1_hoehe = size(bild1, 1);
bild1_breite = size(bild1, 2);
bild2_hoehe = size(bild2, 1);
bild2_breite = size(bild2, 2);
if x1 < 1 || x1 > bild1_breite || y1 < 1 || y1 > bild1_hoehe || ...
x2 < 1 || x2 > bild1_breite || y2 < 1 || y2 > bild1_hoehe || ...
x3 < 1 || x3 > bild2_breite || y3 < 1 || y3 > bild2_hoehe || ...
x4 < 1 || x4 > bild2_breite || y4 < 1 || y4 > bild2_hoehe
error('Ungültige Koordinaten für Bildausschnitte');
end
% Bilder zuschneiden
ausschnitt1_bild1 = grau_bild1(y1:y2, x1:x2, :);
ausschnitt1_bild2 = grau_bild2(y1:y2, x1:x2, :);
ausschnitt2_bild1 = grau_bild1(y3:y4, x3:x4, :);
ausschnitt2_bild2 = grau_bild2(y3:y4, x3:x4, :);
% Variabilität der beiden Bildausschnitte ermitteln
var_max1 = var(double(ausschnitt1_bild1(:)) - double(ausschnitt1_bild2(:)));
var_max2 = var(double(ausschnitt2_bild1(:)) - double(ausschnitt2_bild2(:)));
% Mischgüte berechnen
entmischungsintensitaeten(i, 1) = var_mix1 / var_max1;
entmischungsintensitaeten(i, 2) = var_mix2 / var_max2;
end
% Berechnung des Mittelwerts der Entmischungsintensitäten
I_gesamt = mean(entmischungsintensitaeten, 2);
% Berechnung der Mischgüte
mischguete = 1 - sqrt(I_gesamt);
% Plot der Mischgüte über die Bilder hinweg
figure;
plot(1:anzahl_bilder, mischguete);
xlabel('Bildnummer');
ylabel('Mischgüte');
title('Veränderung der Mischgüte über die Bilder');
0 Comments
Answers (1)
Abhinaya Kennedy
on 27 Mar 2024
Hi Lisa,
To address the issue with fluctuating colour values due to external influences in your image analysis, you can apply the following preprocessing steps to make your images more consistent:
Histogram Equalization: Apply histogram equalization to both your reference and analysis images to adjust their contrast levels, making them more consistent across different lighting conditions.
equalized_image = histeq(grayscale_image);
Gaussian Filter: Apply a Gaussian filter to smooth out the images, reducing noise that might affect your variance calculations.
smoothed_image = imgaussfilt(grayscale_image, 2); % Adjust the standard deviation as needed
Incorporate these steps after converting each of your images (including the reference image) to grayscale and before any cropping or variance calculations. This should help mitigate the issue of negative mixing qualities by making your image analysis more robust to external changes.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!