2016-03-08 208 views
0

以下代碼顯示了藍色和紅色組合的圖像。但是,如果我刪除close聲明它產生一個灰度圖像(這是我想要的)。Matlab圖像閾值處理

爲什麼會發生,以便將來避免它?

我正在關注this tutorial on youtube

clear; 
    animal1=imread('animal1.jpg'); 

    %% GrayScale 
    animal2=rgb2gray(animal1); 

    %% scale 
    bright=animal2*1.5; 
    imshow(bright); 
    close; 

    %% threshold 
    binary= bright>220; 
    imagesc(binary); 

回答

3

當你調用imshow功能,新的圖形被創建,並且默認colormap設置爲grayscale。如果您未關閉,則imagesc使用相同的colormap,並使用灰度級顯示二進制圖像。

否則,當前數字被破壞,創建一個新數字,並且imagesc函數定義新的colormap。在這種情況下,默認的colormapparula,其從藍色變爲黃色。

請注意,您可以直接使用imshow函數來顯示二進制圖像。

1

由於@dlegland指出,這是colormap的問題。

在MATLAB中,a colormap定義了數據(在圖像,繪圖等等中)映射到屏幕上的顏色的方式。這是通過線性映射完成的,該映射可以是different for each axes

當您致電imshow時,它是一個相對較高級別的功能,它可以改變顯示軸的許多屬性。這包括顏色表,顏色限制和其他類似刻度標記的內容。在你的情況下,因爲你給它一個灰度圖像(使用rgb2gray創建),它將圖形/軸設置爲使用gray色彩地圖。

imagesc,但是,是一個低級別的功能使當前的軸線的任何變化與它改變顏色限制跨越所述圖像的整個動態範圍的異常。因此,當您使用imagesc在先前由imshow使用的軸上繪製圖像時。它只是使用imshow正在使用的顏色映射(gray)。

如果尚未調用imshow,則該圖將使用默認的顏色映射(通常爲parula),並且您的圖像將使用此顏色映射顯示。

現在好的一點是,您可以更改正在與colormap命令一起使用的顏色映射表。例如使用灰度,你會做

colormap gray 

或者,如果你想指定顏色表只有一個特定的軸,你可以做以下

ax = axes(); 
colormap(ax, gray) 

你唯一的選擇grayparula。 MATLAB有一些內置的colormaps,或者你甚至可以指定你自己的自定義色彩地圖。