Contents



コマンドウィンドウにimageやimagescとうつと、変な少年の写真が出てきます。あれは、どなたなのでしょうか?

matlabのイースターエッグの一つだそうです。ネットで探してみましたが誰も知らないみたいです。Image Processing ToolboxのチームリーダーであるSteve Eddinsなら知ってるんじゃないかとのことですので、メールしてみたらどうでしょう。ちなみにMatlabには16枚の隠し画像があり、下のコードで表示できるそうです。

clf
bit = [0 5 5 1 1 1 1 5 5 5 1 4 4 4 4 1];
img = get(image,'cdata');
colormap gray
for i=1:length(bit)
subplot(4,4,i)
img = img * 2^bit(i);
imagesc(floor(img))
axis image
img = rem(img,1);
end
(てっぺい) 2006-12-01 01:03:20


二次元の行列をimagesc()で適当なカラーマップを使って塗りつぶしているのですが,データのないところ(NaN)も一番小さな値の色で塗りつぶされてしまいます.黒とか白とかにする方法はありますか?同様に,指定した数値の範囲より大きい値や小さな値は,指定したカラーマップの両端の値で塗られてしまいます.これを任意の色に割り当てることは出来るのでしょうか?初歩的な質問で大変恐縮ですが,よろしくお願いいたします

初歩的なんてとんでもない。
なかなか奥が深いところだと思いますよ。

a=[1 2 10;NaN 0 10 ;-10 0 10];
b=imagesc(a);
c=~isnan(a);
set(b,'alphadata',c);%NaNのところを透明にして、Caxisの色が見えるようにする。
set(gca,'color',[0 0 0]); %[0 0 0]のところに好きな色を入れてください。この場合は黒。

でなんとかできます。
ただし、alphamapを使っているので、
figureを外部出力したときはどうなるやら。

指定した数値の範囲より大きい値や小さな値の場合も
c=~isnan(a);の部分を

c=~(a>=10|a<=-10);

とかしてやればできちゃうかも。

もっと細かく制御したければimagescをつかわず、
imageをつかって、自分で値とcolormapを制御してやりましょう。
(excel使い) 2007-09-13 23:40:30

(10000,244)の中にデータが0~13までランダムで入っていてデータが、0=グレー、1~4=黄色、5~8=オレンジ、9~12=赤、13=紫と色を付けて2次元プロットする場合、どのように記述すればいいでしょうか?現在、1つ1つFor文で回してデータを見て色をつけてプロットしていて、時間が大幅にかかってしまい困ってます。


10000x244の2次元ビットマップを表示するということでいいのでしょうか?
こんなのはいかがでしょう。
for文よりはだいぶ速いと思います。

% 0~13までの乱数データ生成
data = floor(14*rand(10000,244));
% 0~13までに対応したカラーマップを作成
colmap = [0.5,0.5,0.5; 1,1,0; 1,1,0; 1,1,0; 1,1,0; 1,0.5,0; 1,0.5,0; 1,0.5,0; 1,0.5,0; 1,0,0; 1,0,0; 1,0,0; 1,0,0; 1,0,1];
% 表示
imagesc(data, [0 13]);
colormap(colmap);
(まーぼ) 2008-05-26 18:35:30


黄色い背景に赤い四角の物体の画像があるとして、その赤い四角の物体の色を黒にする、というようなプログラムを組むにはどうしたらよいでしょうか。

MATLABで画像を作る、もしくはimread等で読み込んだ際には画像データは3次元配列で表現されます。例えば100x100ピクセルの画像は100x100x3のサイズの配列になり、3つの平面にはそれぞれRed, Green, Blueの値が0〜1の値として格納されます。黄色を残したままで赤→黒にするのであれば、(R, G, B) = (1, 0, 0)のピクセルを探して (0, 0, 0)にすれば良いかと思います。

例:
I = imread('test.jpg'); % 画像を読み込む
I( I(:,:,1)==1 & I(:,:,2)==0 & I(:,:,3)==0 ) = 0;

(まーぼん) 2008-12-30 19:07:49