行列データのイメージ表示で菱形を表現する方法

4 次查看(过去 30 天)
Yuki Tsukahara
Yuki Tsukahara 2023-7-31
配列データを読み込んでイメージ表示するときに,ななめの線を表現する方法はありますか?
data2_1には10×10の行列が作成されており,下記のようにdata2_1を反転させた行列(data2_2からdata2_4)を結合して,以下のようなイメージ図を作成しています.
data2_2=flipud(data2_1);%上下反転
data2_3=fliplr(data2_2);%左右反転
data2_4=fliplr(data2_1);%左右反転
cmap = colormap("default");
data3_1=horzcat(data2_3,data2_2);
data3_2=horzcat(data2_4,data2_1);
data4=vertcat(data3_1,data3_2)
im = data4 ; imagesc(im);colorbar;
colormap default;
colorbar;
clim([100 450]); % カラーマップの値域を100~450に設定
作成された図の青い領域について,辺が階段のように表現されていますが,線で表現してきれいな菱形になるようにしたいです.
何かいい方法はありますか?

回答(1 个)

交感神経優位なあかべぇ
data2_1を模したサンプルデータから斜め線を表現させた例を書きました。
辺が階段のようになっている位置を検索し、その位置の近似直線を計算しました。
% data2_1を模したサンプルデータの作成
data2_1 = repmat(400, 10, 10);
col = repelem(3:10, 1:8);
rowcell = arrayfun(@(x) {1:x},1:8);
row = 11 - [rowcell{:}];
ind = sub2ind(size(data2_1), row, col);
data2_1(ind) = 200;
% 作成したサンプルデータの描画
imagesc(data2_1);
colorbar;
clim([100 450]);
BW = data2_1 > 300; % 300を基準に2値データにする。
% 縦方向に対して0,1、もしくは1,0となっているデータの境界を検索する。
rowDiff = diff(BW,1,1);
rowDiff = rowDiff ~= 0;
% 横方向に対して0,1、もしくは1,0となっているデータの境界を検索する。
colDiff = diff(BW,1,2);
colDiff = colDiff ~= 0;
% 検索した境界値から、境界の位置データに変換する。
[row, col] = find(rowDiff);
data = [row + 0.5, col];
[row, col] = find(colDiff);
data = [data; row, col + 0.5];
% 境界の位置データを描画
imagesc(data2_1);
colorbar;
clim([100 450]);
hold on;
scatter(data(:,1), data(:,2));
p = polyfit(data(:,1), data(:,2), 1); % 境界の位置データから近似直線を計算する。
% xが0と20の時の近似直線のy値を計算する。
x = [0,size(data2_1, 2)*2];
y = polyval(p, x);
% 近似直線の描画
figure;
imagesc(data2_1);
clim([100 450]);
colorbar;
hold on;
scatter(data(:,1), data(:,2));
plot(x,y);

类别

Help CenterFile Exchange 中查找有关 イメージ 的更多信息

标签

产品


版本

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!