簡體   English   中英

在Matlab中,如何使用imagesC在2D熱圖中``平滑''像素

[英]In matlab, how to 'smooth' pixels in 2D heatmap using imagesc

使用MATLAB,我有一個矩陣( data )並使用imagesc(data)作圖以生成熱圖:

data = [1 1 1 1 1 1 1 1 1 1; 1 1.04 1.04 1.04 1.03 1 1.01 1.01 1.03 1.01; 1.36 1.3 1.25 1.2 1.15 1.1 1.2 1.13 1.07 1.11; 3.65 3.16 2.94 2.68 2.39 2.22 2.17 1.95 1.79 1.81; 5.91 5.75 5.47 5.3 4.98 4.79 4.62 4.55 4.38 4.19; 6 6 5.99 5.83 5.49 5.33 5.14 4.94 4.77 4.74];
imagesc(data)

在此處輸入圖片說明

有沒有一種方法可以使像素“平滑”,以產生更多類似的圖像: 在此處輸入圖片說明

interp2在這里可能有用。 將數據用作關鍵點,然后創建跨越相同寬度和高度並在關鍵點之間進行插值的更精細的點網格。

像這樣:

%// Define your data
data = [1 1 1 1 1 1 1 1 1 1; 1 1.04 1.04 1.04 1.03 1 1.01 1.01 1.03 1.01; 1.36 1.3 1.25 1.2 1.15 1.1 1.2 1.13 1.07 1.11; 3.65 3.16 2.94 2.68 2.39 2.22 2.17 1.95 1.79 1.81; 5.91 5.75 5.47 5.3 4.98 4.79 4.62 4.55 4.38 4.19; 6 6 5.99 5.83 5.49 5.33 5.14 4.94 4.77 4.74];    

%// Define integer grid of coordinates for the above data
[X,Y] = meshgrid(1:size(data,2), 1:size(data,1));

%// Define a finer grid of points
[X2,Y2] = meshgrid(1:0.01:size(data,2), 1:0.01:size(data,1));

%// Interpolate the data and show the output
outData = interp2(X, Y, data, X2, Y2, 'linear');
imagesc(outData);

%// Cosmetic changes for the axes
set(gca, 'XTick', linspace(1,size(X2,2),size(X,2))); 
set(gca, 'YTick', linspace(1,size(X2,1),size(X,1)));
set(gca, 'XTickLabel', 1:size(X,2));
set(gca, 'YTickLabel', 1:size(X,1));

%// Add colour bar
colorbar;

需要底部的代碼,因為定義更細的網格最終會增加圖像的大小。 我需要重新標記軸以恢復到原始大小。

我們得到這個:

在此處輸入圖片說明

小筆記

我正在使用MATLAB R2014a,默認顏色圖是jet。 您正在使用R2014b +,默認的顏色映射為parula。 您不會獲得與我相同的顏色分布,但是您將獲得所需的平滑度。

您還可以將pcolor(data)函數與shading interp以使顏色分辨率平滑。 繪圖前無需插值數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM