13

プロットを作成しようとしていcontourfますが、データ配列の特定の領域に NaN があります (データ マトリックスのみ、x および y メッシュグリッド マトリックスがいっぱいです)。これらの NaN を透明にしたいのですが、長方形の境界にある NaN 用です。ただし、データ マトリックス内の連続する NaN 領域は透明ではなく白です。以下に例を示します。

コード:

[X Y] = meshgrid(10:50);
Z = X.*Y;
Z(10:30,10:30) = NaN;
figure
imshow(uint8(repmat(1:4:240,[60,1,3])));
hold on;
contourf(X,Y,Z);
colormap jet;

出力:

ここに画像の説明を入力

ヒント:

上記のコードに次を追加します。

% Find Face
set(findobj(h,'FaceColor',[1 1 1]),'FaceAlpha',0))

白いパッチ オブジェクトを見つけて透明に設定します。残念ながら、下のパッチはいっぱいです:

ここに画像の説明を入力

更新:NaN領域を取得して背景画像を重ね合わせると、次のようになります。

ここに画像の説明を入力

ご覧のとおり、画像全体をカバーしていません。私が使用imdilateすると、白い領域が取り除かれますが、同時に黒い境界線と少しのデータも破壊されます。

4

2 に答える 2

5

H. Muster の回答に基づいて、データをセグメント化して人為的にバンドを作成しました (単純な関数を使用してバンドを選択するかcontour、ダミーの図でそれらを作成し、それらを返して再利用することができます)。

[X Y] = meshgrid(10:0.1:50);
Z = X.*Y;
Z(100:300,100:300) = NaN;
figure
hold on;
h = pcolor(X,Y,round(Z/500)*500);
set(h,'Edgecolor',  'interp');
colormap jet;
set(gca, 'XLim', [0 60], 'YLim', [0 60]);

残念ながら、含まれているツールボックスimreadがないため、基になるグラデーションを表示できませんが、これでうまくいくと思います。適度に滑らかな画像を得るには、解像度を 10 倍にする必要がありました。

ここに画像の説明を入力

于 2013-04-09T05:45:04.953 に答える