3

これを行う機能があることは理解していますが、ここで何が起こっているのかを正確に理解できるように、手動で行いたかったのです。

したがって、私の目標は、RGB イメージを読み込んでグレースケールに変換することです。これまでの画像処理作業はすべてグレースケール ベースのみだったので、少し戸惑いました。

私は最初に画像を読み込もうとしました

fid = fopen('color.raw');
myimage = imread(fid, [512 384], 'uint8');
fclose(fid);

しかし、 myimage は空の 0 x 0 行列になります。「R」「G」および「B」の値を各ピクセルに割り当てて、各ピクセルに 3 つの色の 3 つの値を割り当てる必要があると思いますが、それが正しいかどうか、またそれを試みる方法さえわかりません。

私の質問は次のとおりです。RGB 画像を読み取ってからグレースケール画像に変換するにはどうすればよいですか。

編集:RGとBの値を取得した後、RGBをグレースケールに変換する方法を理解していますが、Matlabに画像を読み込ませることができないようです。誰か助けてもらえますか? imread を使用するのが最も理にかなっているようですが、

[pathname] = ...
     uigetfile({'*.raw';'*.mdl';'*.mat';'*.*'},'File Selector');
fid = fopen(pathname);
myimage = imread(fid);
fclose(fid);

fopenのファイル名が無効であるというエラーが表示されますが、その理由が本当にわかりません。

4

3 に答える 3

3

概念的には、赤、緑、青のコンポーネントを平均し、その平均を赤、緑、青のコンポーネントの出力として提供するだけです。単純な算術平均を使用してこれを行うことができます

  • (r+g+b)/3。

またはキックの場合は、幾何平均を使用してわずかに異なるコントラストを得ることができます..

  • (r*g*b)^(1/3)。
于 2013-06-24T13:35:12.637 に答える
3

imread - グラフィックス ファイルから画像を読み取ります (ドキュメントに記載されています) http://www.mathworks.com/help/matlab/ref/imread.html

RGB からグレー スケールへの変換には、輝度法を使用します。http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/

光度法は、平均法のより洗練されたバージョンです。また、値を平均化しますが、人間の知覚を考慮して加重平均を形成します。私たちは他の色よりも緑に敏感であるため、緑のウェイトが最も高くなります。光度の式は 0.21 R + 0.71 G + 0.07 B です。

于 2013-06-24T13:35:19.790 に答える