Ich fand eine ähnliche Frage emgu Calculate histogram with matrices ... aber ich vermisse einige Schritte!Load Bin-Werte zu Dichtehistogramm von Float-Array
Emgu 3/C#/SQL Server 2014
Ich versuche, ein Bild zu vergleichen mit mehreren Bildern in einer varbinary (max) in SQL Server gespeichert.
Mein erster Schritt von vielen ist es, Histogramme zu vergleichen, weil einige Bilder (Objekte) ähnlich, aber mit verschiedenen Farben sein können. Daher möchte ich in meinem Vergleichsalgorithmus auch die Farbe der zu vergleichenden Objekte berücksichtigen.
Ich habe manged zusammen einige Code setzen hier auf der Grundlage anderer Posten, und ich bin in der Lage erfolgreich zu tun, wenn ich berechnen die Basis Histogramme auf die Bilder:
histBlueSource.Calculate(new Image<Gray, byte>[] { imgBlueSource }, true, null);
histBlueTarget.Calculate(new Image<Gray, byte>[] { imgBlueTarget }, true, null);
double cBlue = CvInvoke.CompareHist(histBlueSource, histBlueTarget, HistogramCompMethod.Correl);
Da Fragen der Leistung Beim Laden der Bilder aus der Datenbank dachte ich daran, die BinValues aus den Histogrammen zu extrahieren und sie einfach in der SQL SERVER-Datenbank zu speichern, um sie später wieder in ein DenseHistogram hochzuladen.
ich extrahieren erfolgreich die binvalues mit:
//** problem may be here - dont know if i should SAVE/LOAD bin value to a 1d FLOAT[256]
float[] BlueHist = new float[256];
BlueHist = histBlue.GetBinValues();
ich serialisiert, um SQL Server zu speichern. Ich kann das von SQL-Server lesen, deserialisieren und mit meinen bin-Werten genau wie die extrahierten zu einem float [256] zurückkehren.
Um die Daten wieder zu einem Densehistogram laden diese ich tue:
DenseHistogram histBlue = new DenseHistogram(256, new RangeF(0.0f, 255.0f));
BlueHist = (float[])bformatterBlue.Deserialize(memStreamBlue);
//**Other problem may be here
Matrix<float> mtx = new Matrix<float>(BlueHist);
finde ich seltsam, dass Matrix-Daten {float [256,1]}. Die Werte aus den Binwerten werden dann von [0,0] bis [255,0] geladen.
Als ich den letzten Schritt tue
histBlue.Calculate(new Matrix<float>[] { mtx }, false, null);
Das Problem das Histogramm binvalues ist nicht korrekt geladen, nur die [0] einen Wert von 135 hat und die andere [255] 0.
Kann mir bitte jemand mit diesem oder anderen Vorschlag helfen, das selbe zu machen?