2016-08-12 1 views
0

Ich versuche, ein Bild zu autolevel. Mein Code sieht wie folgt aus:AutoLevel (Channels.RGB) scheint keine Wirkung zu haben

MagickImage image = new MagickImage(stream); 
image.AutoLevel(Channels.RGB); 

später im Code ich das Bild auf eine Web-Antwort bin das Senden. Aus irgendeinem Grund hat dieser Code keine Auswirkungen auf das Bild. Es sieht genauso aus wie das Original. Wenn ich zu:

MagickImage image = new MagickImage(stream); 
image.Posterize(2); 

Dann sehe ich deutlich den Filter angewendet.

Was fehlt mir bei AutoLevel?

Update:

ich diesen Code versucht:

var image1 = Image.Clone(); 
Image.AutoLevel(Channels.RGB); 
var diff = Image.Compare(image1, ErrorMetric.RootMeanSquared); 

und den Wert diff ist 0,0, während mit diesem Code (und unter Verwendung der gleichen Bild):

var image1 = Image.Clone(); 
Image.Equalize(); 
var diff = Image.Compare(image1, ErrorMetric.RootMeanSquared); 

der Wert von diff ist 0.315

+0

Nur um zu verdeutlichen, ist der Wert von diff 0.0 egal welches Foto ich benutze – Juvaly

Antwort

0

Der Effekt von AutoLevel ist möglicherweise nicht abhängig von Ihrem Eingabebild. Ich habe einen schnellen Test mit dem folgenden Code gemacht:

using (MagickImage imageA = new MagickImage("logo:")) 
{ 
    imageA.Write(@"c:\imageA.jpg") 

    imageA.AutoLevel(Channels.Default); 

    using (MagickImage imageB = new MagickImage("logo:")) 
    { 
    double difference = imageA.Compare(imageB, ErrorMetric.RootMeanSquared); 
    Assert.AreNotEqual(0.0, difference); 

    imageB.Write(@"c:\imageB.jpg") 
    } 
} 

Diese Tests bestanden, aber der Wert der Differenz ist sehr klein. Das heißt, wenn Sie die Bilder mit Ihren Augen vergleichen, werden Sie wahrscheinlich keinen großen Unterschied feststellen können.

Und unten ist ein Beispiel, das Ihnen zeigt, dass die Methode AutoLevel etwas tut, wenn Sie ein anderes Eingabebild verwenden.

using (MagickImage imageA = new MagickImage("gradient:gray70-gray30", 150, 100)) 
{ 
    imageA.Write(@"c:\imageA.jpg") 

    imageA.AutoLevel(Channels.Default); 

    using (MagickImage imageB = new MagickImage("gradient:gray70-gray30", 150, 100)) 
    { 
    double difference = imageA.Compare(imageB, ErrorMetric.RootMeanSquared); 
    Assert.AreNotEqual(0.0, difference); 

    imageB.Write(@"c:\imageB.jpg") 
    } 
} 
Verwandte Themen