簡體   English   中英

Matlab顏色圖-如何僅更改一個特定值,而不更改一個值范圍?

[英]Matlab colormap - How can I change only ONE specific value, not a range of values?

這是我在StackOverflow上遇到的第一個問題,所以請諒解。

我必須使用MATLAB可視化多個單通道圖像(二維矩陣)。 每個像素的值通常在~10^-10~10^-6 我正在使用翻轉的jet (因此深紅色較低,深藍色較高)。

現在,其中一些矩陣還包含一些0像素值。 只想為這些像素設置特定的顏色(例如白色)。 我現在所做的是:

cmap = colormap('jet'); % standard 64 colors jet colormap 
cmap = flipud(cmap);

然后,我嘗試根據網上找到的不同答案(包括如何在Matlab中更改顏色圖中的單一顏色? )來編輯顏色圖的第一行,並將其設置為[1 1 1] (白色):

cmap(1,:) = [1 1 1];
colormap(cmap);

問題在於,對色圖的此編輯將圖像的第一個范圍/ 64值(我想)設置為白色,而不是僅將0設置為白色。

我想知道:是否可以僅將那些像素設置為白色?

我想我的問題取決於這樣一個事實,即使對於具有這幾個0值像素的圖像,倒數第二個像素也很多而且非常 (大約10^-10 )。

提前非常感謝您! 最好的祝願!

烏金

解決此問題的一種方法是使用所需的顏色映射表對圖像進行實際編碼,然后使用logical索引將原始圖像中的每個位置(在此最終結果中從0設置為白色)。

因此,給定您的2D圖像,請實際創建一個版本,並使用ind2rgb將其映射到jet顏色圖。 之后,在原始圖像中搜索0值,然后將最終彩色結果中的這些位置設置為白色。 您的問題的最后一點非常有意義。 如果您的值介於這么小的范圍之間,然后也具有0值,則最終顏色圖中的顏色將偏向顏色圖的最末端。 這樣,我可以建議的另一件事是將原始圖像的原本為零的值設置為非零范圍內的值,以使它不會使色彩映射飽和。 一旦您最終用建議的顏色圖轉換了圖像,我們就可以手動將這些像素設置為白色。

假設您的圖片存儲在im ,請執行以下操作:

cmap = colormap('jet'); % standard 64 colors jet colormap 
cmap = flipud(cmap);
im2 = im;
ind = im == 0; %// Find locations that are zero in the original image
im2(ind) = max(im(:)); %// Make a copy of the original image where 0 pixels are set to the maximum of the image
rgb = ind2rgb(im2, cmap); %// Create pseudo-coloured image
rgb(repmat(ind, [1 1 3])) = 1; %// Set corresponding locations to white

然后,如果您具有圖像處理工具箱,則可以使用imshow ,也可以使用image可視化結果(即imshow(rgb)image(rgb) )。

次要建議

我建議您更改cmap = colormap('jet'); cmap = jet; 相反,因為colormap('jet')生成一個空的圖形窗口(如果尚未打開)。 cmap = jet; 將給您相同的結果。

暫無
暫無

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

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