2017-07-07 6 views
1

edit rgb2grayを使用してソースファイルを開くことができますが、表示方法がわからない別の関数rgb2gray.mが表示されました。.mexファイルのソースコードを表示する方法

行54-55以下の機能が含まれています。

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

私はこのrgb2graymex関数のソースコードを表示するにはどうすればよいですか?

+3

あなたは主に彼らがそれを変換するために使用したアルゴリズムに興味がありますか?また、本当に興味があれば。古いバージョンのMatlabではmexファイルに含まれていない可能性があります。ですから、2006年からバージョンをダウンロードできる場合は、そこからソースコードを入手できる可能性があります。 – Durkee

+0

はい、私はただ彼らが使用する変換マトリックスを見る必要があります。彼らは 'Y = 0.2989 * R + 0.5870 * G + 0.1140 * B'と文書化していますが、手作業で計算を実行し、枕とNumpy Pythonライブラリのrgbからグレー関数に相当するものと比較した結果、事件である。私は奇妙な丸めがあると信じています –

+0

残念ながら、私はその古いMatlab版にアクセスできない。良いアイデア/ハック –

答えて

1

通常、@Adriaanが答えたとおり、.mexファイルの内容は表示されません。

あなたが本当に望むのは、RGBをグレースケールに変換するための変換マトリックスから使用される係数を見つけることです。私に与え

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

:あなたはすぐにあなたが引用節以下のコードでこれらを見つけることができます

coef = 
    0.298936021293775 0.587043074451121 0.114020904255103 

今、それはあなたが.mexファイルが同じことをやっていることを決定的に証明することができないというのは本当ですこのようなもの。 .mexファイルは、小さなnx3 RGBカラーマップではなく、大きなmxnx3 RGBイメージを渡すときに高速化するためのものです。私はそれが異なる係数を使用していたならば非常に驚くだろう。私がちょうど行ったいくつかの実験は、.mexファイルとコード内の係数を使用して数値の差が最も小さい(< 1e-15)ことを示しています。

+0

'T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703])の目的は何ですか? – Durkee

+0

これは結果をMatlab'sにもっと近づけます。気づいて私に知らせてくれてありがとう! –

+2

@Durkee完全配列は、NTSC(Y、I、Q)値をRGB値に変換するための配列です。詳細については、Image Processing Toolboxの 'doc ntsc2rgb'を参照してください。 RGBをNTSCに変換するには、その行列の逆行列を使用します。最初のNTSCコンポーネント(Y)はグレースケールと同じなので、コードは最初の行のみを使用しています。開発者は、係数をあらかじめ計算するのではなく、コード全体に行列を置き、その場で逆変換し、関連する係数を抽出する方が便利だと考えました。おそらく、これを行うことで、 'rgb2gray'の速度を少し上げることができます。 –

4

rgb2graymexは、その名前が示すように、.mexファイルです。 .mexファイルはあらかじめコンパイルされたファイルなので、エキゾチックなデコンパイラ(通常は100%の結果は得られません)を使用しない限り、その内容を見ることはできません。プロプライエタリなコードで起こるだろう。

続きを読むMEXファイルon the MathWorks site

関連する問題