2017-07-07 4 views
1

Ich sah online, dass Sie einfach edit rgb2gray verwenden können, um die Quelldatei zu öffnen, aber ich lief in eine andere Funktion in der rgb2gray.m Datei, die ich nicht wissen, wie angezeigt wird.So sehen Sie den Quellcode einer .mex-Datei

Zeilen 54-55 enthalten die folgende Funktion:

if threeD 
    I = images.internal.rgb2graymex(X); 

Wie kann ich den Quellcode für diese rgb2graymex Funktion?

+3

Sind Sie hauptsächlich daran interessiert, welchen Algorithmus sie verwendet haben, um es zu konvertieren? Auch wenn du wirklich interessiert bist. Es besteht eine gute Chance, dass es in älteren Versionen von Matlab nicht in einer mex-Datei enthalten ist. Wenn Sie also eine Version von zB 2006 herunterladen können, besteht eine gute Chance, dass Sie den Quellcode von dort beziehen können. – Durkee

+0

Ja, ich muss nur sehen, welche Transformationsmatrix sie verwenden. Sie dokumentieren es als "Y = 0,2989 * R + 0,5870 * G + 0,1140 * B", aber nach dem manuellen Ausführen der Berechnungen und dem Vergleich der Ergebnisse mit den RGB-Funktionen in den Pillow- und Numpy-Python-Bibliotheken scheint dies nicht der Fall zu sein der Fall sein. Ich glaube, dass es einige seltsame Rundungen gibt –

+0

Und leider habe ich keinen Zugriff auf das alte einer Matlab-Version. Gute Idee/Hack obwohl –

Antwort

1

Im Allgemeinen können Sie den Inhalt einer .mex Datei nicht sehen, wie @Adriaan in seiner Antwort angibt.

Sie erwähnen in den Kommentaren, dass das, was Sie wirklich wollen, ist, die Koeffizienten zu finden, die von der Transformationsmatrix zum Konvertieren von RGB in Graustufen verwendet werden. Sie können diese in den Code unmittelbar unter dem Abschnitt finden Sie zitieren:

coef = 
    0.298936021293775 0.587043074451121 0.114020904255103 

nun schlüssig, dass die .mex Datei tut das gleiche, es ist wahr, dass Sie nicht nachweisen können:

T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]); 
    coef = T(1,:); 

Das gibt mir Ding als das; aber die Datei .mex ist nur da, um Dinge zu beschleunigen, wenn Sie ein großes mxnx3-RGB-Bild statt einer kleinen nx3-RGB-Farbtabelle übergeben. Ich wäre sehr überrascht, wenn es verschiedene Koeffizienten verwenden würde. Einige Experimente, die ich gerade durchgeführt habe, zeigen nur die kleinsten numerischen Unterschiede (< 1e-15) zwischen der Datei .mex und der Verwendung der im Code vorhandenen Koeffizienten.

+0

Welchen Zweck hat das 'T = inv ([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]); – Durkee

+0

Ja, das bringt die Ergebnisse viel näher zu Matlabs. Danke, dass du es bemerkt hast und es mich wissen lässt! –

+2

@Durkee Das vollständige Array dient zur Konvertierung von NTSC (Y, I, Q) -Werten in RGB-Werte. Weitere Informationen finden Sie unter 'doc ntsc2rgb' aus der Image Processing Toolbox. Um RGB in NTSC zu konvertieren, verwenden Sie die Umkehrung dieser Matrix. Die erste NTSC-Komponente (Y) entspricht der Graustufe, daher verwendet der Code nur die erste Zeile. Es sieht so aus, als ob der Entwickler es praktischer fand, die volle Matrix in den Code zu setzen, sie im Flug zu invertieren und die relevanten Koeffizienten zu extrahieren, anstatt die Koeffizienten vorzurechnen.Sie könnten wahrscheinlich 'rgb2gray' eine kleine Menge beschleunigen, indem Sie dies tun. –

4

rgb2graymex ist, wie der Name schon sagt, eine .mex-Datei. .mex-Dateien sind vorkompilierte Dateien, deren Inhalte Sie nicht anzeigen können, es sei denn, Sie verwenden exotische Decompiler (die normalerweise kein 100% -Ergebnis ergeben) oder erhalten den Quellcode von demjenigen, der sie geschrieben hat, was nicht der Fall ist wird mit proprietärem Code passieren.

Lesen Sie mehr auf MEX-Dateien on the MathWorks site.

Verwandte Themen