Histogramm-Ausgleich-Methode ohne Verwendung von histeq

Ich bin neu in Matlab und versuche einen code implementieren, um die gleiche Funktion wie histeq ohne tatsächliche Nutzung Funktion. In meinem code das Bild in Farbe bekomme ich ändert sich drastisch, wenn es sich nicht ändern sollte, der viel. Die durchschnittlichen Intensität in dem Bild (im Bereich zwischen 0 und 255) ist 105.3196. Das Bild ist von einer open-source-pollen Teilchen.

Jede Hilfe wäre sehr geschätzt werden. Je früher, desto besser! Könnte bitte jede Hilfe vereinfacht werden, da mein Matlab Verständnis ist begrenzt. Danke.

clc;
clear all;
close all;

pollenJpg = imread ('pollen.jpg', 'jpg');
greyscalePollen = rgb2gray (pollenJpg);

histEqPollen = histeq(greyscalePollen);

averagePollen = mean2 (greyscalePollen)

sizeGreyScalePollen = size(greyscalePollen);
rowsGreyScalePollen = sizeGreyScalePollen(1,1);
columnsGreyScalePollen = sizeGreyScalePollen(1,2);

for  i = (1:rowsGreyScalePollen)
    for  j = (1:columnsGreyScalePollen)
        if (greyscalePollen(i,j) > averagePollen)
            greyscalePollen(i,j) = greyscalePollen(i,j) + (0.1 * averagePollen);

            if (greyscalePollen(i,j) > 255)
                greyscalePollen(i,j) = 255;
            end

        elseif (greyscalePollen(i,j) < averagePollen)
            greyscalePollen(i,j) = greyscalePollen(i,j) - (0.1 * averagePollen);

            if (greyscalePollen(i,j) > 0)
                greyscalePollen(i,j) = 0;
            end

        end
    end
end

figure;
imshow (pollenJpg);
title ('Original Image');
figure;
imshow (greyscalePollen);
title ('Attempted Histogram Equalization of Image');
figure;
imshow (histEqPollen);
title ('True Histogram Equalization of Image');
  • Ein bug (sollte aber nicht der Haupt-Fehler): diese Zeile if (greyscalePollen(i,j) > 0) sollte if (greyscalePollen(i,j) < 0) denke ich.
  • Ich fühle mich wie ein idiot, haha. Danke. Auch in meiner Linie: greyscalePollen(i,j) = greyscalePollen(i,j) + (0.1 * averagePollen); und greyscalePollen(i,j) = greyscalePollen(i,j) - (0.1 * averagePollen); Die plus-und minus-sollte getauscht werden, haha. So dumm.... Danke 😀
  • Ich denke, dass Ihr Algorithmus ist grundlegend falsch. Es erhöht den Kontrast, aber es ist nicht äquivalent zu der Histogramm-Ausgleich.
  • Ich bin nicht überrascht... Wie gesagt ich bin ganz neu hier, haha. Hast du irgendwelche Empfehlungen?
  • Was Sie tun müssen: berechnen Sie die Anzahl der Pixel in jedem Grauwert Palette (eine bin). Dies gibt eine Funktion h(g). Nun aus, die kumulative Summe, dass H(g)=h(g)+h(g_previous)+h(g_previous_previous)... etc. Dann berechnen Sie die inverse dieser Funktion, H^-1, und wenden Sie dann diese Funktion, um das Bild. Mathe hier: en.wikipedia.org/wiki/Histogram_equalization; Umsetzung hier "code" -spot.co.za/2008/09/21/...
  • Ich verwendet imhist vergleichen Sie die Histogramme erzeugt durch meine Methode und die eigentliche Entzerrung und, wie Sie sagte, sind Sie sehr unterschiedlich...
  • Ich werde zu erweitern mein Kommentar in eine Antwort.

InformationsquelleAutor Gabe2705 | 2013-04-03
Schreibe einen Kommentar