2015-11-11 206 views
0

Image如何從matlab中的數組中找到最小值?

我想提取圖中用黑色輪廓標記的兩點(即它們的值)。這些極小點是2和5.然後提取這些標記點座標我想要計算它們之間的距離。

,我使用繪製圖像的平均值,計算出最低高度和位置的代碼

I1=imread('open.jpg'); 
I2=rgb2gray(I1); 
figure, title('open'); 
plot(1:size(I2,1), mean(I2,2)); 
hold on 
horizontalAverages = mean(I2 , 2); 
plot(1:size(I2,1) , horizontalAverages) 
[Minimas locs] = findpeaks(-horizontalAverages) 
plot(locs , -1*Minimas , 'r*') 

極小

-86.5647 
-80.3647 
-81.3588 
-106.9882 
-77.0765 
-77.8235 
-92.2353 
-106.2235 
-115.3118 
-98.3706 

locs = 

    30 
    34 
    36 
    50 
    93 
    97 
    110 
    121 
    127 
    136 
+0

對不起,我看錯了這個問題,直到我看了你的數字。我將編輯並附加圖像。 – beaker

+0

你也可以發佈你使用的數據嗎? – rayryeng

+0

假設你有信號處理工具箱,你是否嘗試過['findpeaks'](http://www.mathworks.com/help/signal/ref/findpeaks.html)(只需翻轉輸入數據的符號以找到最大值)? – horchler

回答

0

它是從你的問題有點不清楚你實際上是在尋找因爲,但以下一個班輪將爲您帶來當地最低標準:

% Some dummy data 
x = 1:11; 
y = [3 2 1 0.5 1 2 1 0 1 2 3]; 

min_idx = ([0 sign(diff(y))] == -1) & ([sign(diff(y)) 0] == 1); 

figure 
plot(x, y); 
hold on; 
scatter(x(min_idx), y(min_idx)) 
hold off; 

enter image description here

+0

爲什麼你使用虛擬數據而不是問題中的數據? – IKavanagh

+2

@IKavanagh,因爲OP沒有發佈數據,只是最小值的位置和值,而不是他用於創建圖的實際數據 – Adriaan

+0

基本上我正在研究眼睛跟蹤部分,即開放和閉合眼睛。上圖是關於顯示強度變化的睜開眼睛的平均值。所以我對那些亮度變化像從負像到正像(第一次變化)和從正到負(第二次強度變化)的點感興趣,所以我希望這些值實際來自最小值的整個值以計算距離。這些值是最小值比另一個。所以我想從數組中提取這兩個最小值 – usman

0

如果您有信號處理工具箱,請使用'findpeaks'功能。

[y,locs]=findpeaks(-x) 

會找到當地最低標準。這個函數有很多選項來處理各種特殊情況,所以非常有用。

+0

是felix我已經用上面的命令計算了最小值,現在我想要的是計算所需點之間的值。附件中顯示了所需的要點。請看看 – usman

+0

diff(locs)會給出最小值之間的距離。不確定「期望」之間的含義? –

+0

通過所需的點意味着,我在圖上有10個迷你點,但我對起點和終點感興趣意味着起點是第一最小值,其中負峯值出現,終點是第二最小值,其中負值變爲負值。例如:我的最低點是-86.5647 -80.3647 -81.3588 -106.9882 -77.0765 -77.8235 -92.2353 -106.2235 -115.3118 -98.3706和我感興趣的第二個最低80.36和第5最小值77.07。所以這些都是我想要的。我想要的是提取它們的loc並計算它們之間的距離。你有沒有清楚這個想法? – usman

相關問題