線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2143
推到 Plurk!
推到 Facebook!

找直方圖峰值最大值

尚未結案
bee0606
一般會員


發表:22
回覆:30
積分:10
註冊:2003-08-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-08 20:39:31 IP:61.220.xxx.xxx 未訂閱
請問各位先進..我在一張圖做X方向投影..請問要如何者每個峰值的最大值..之前試著想說用 
h[x]>h[x+1] && h[x+1]找峰值..因為想說就在這兩範圍之內..不過結果不如預期
請問先進有何方法可以解決...如圖找每個峰值........謝謝各位先進     
        
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-08 21:45:50 IP:218.167.xxx.xxx 未訂閱
是不是要先定義每一個波形的週期呢? 這樣才能判斷出該波形的最大值 ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
bee0606
一般會員


發表:22
回覆:30
積分:10
註冊:2003-08-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-08 21:57:13 IP:61.220.xxx.xxx 未訂閱
因為這週期是不固定的....所以這範圍會需要判斷..我現在是想先用變動最大的當作範圍..如0->VALUE OR VALUE->0當作範圍...不過還不知道要如何在一迴圈中就可以定出...不知先進口否提供方法....謝謝ㄋ ㄟ
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-08 22:00:31 IP:218.167.xxx.xxx 未訂閱
剛剛想到一個做法... 應該可以不用定義週期
    若波形存於x陣列, x陣列大小為size    bool goDown = false;
int lastValue = 0;
int nowValue = 0;
int topValue = 0;    for (int i=0; i < size; i  )
{
   nowValue = x[i];
  
   if (nowValue > lastValue && !goDown )
   {
      lastValue = nowValue ; 
   }
   else if (nowValue < lastValue)
   {
      topValue = lastValue; //峰直
      lastValue = nowValue;
      goDown = true; //波形開始往下
   }
   else if ( goDown && nowValue < lastValue)
   {
      lastValue = nowValue;
   } 
   else if ( !goDown && nowValue > lastValue)
   {
      lastValue = nowValue;
      goDown = false; //波形開往上
   }
}
試試看 ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
bee0606
一般會員


發表:22
回覆:30
積分:10
註冊:2003-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-08 22:23:40 IP:61.220.xxx.xxx 未訂閱
不好意思...請問先進!goDown 這是判斷FALSE還是TRUE....我這方面不太清楚 若想在每個峰值的最大值在對應位置畫出...並使用像是tamp_x[bmp-width]存下 ...這樣如何使用..感謝先進
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-08 22:37:09 IP:218.167.xxx.xxx 未訂閱
1. !goDown 這是判斷FALSE還是TRUE    ! --> Not 的意思, 所以當goDown=false時 !goDown = true    2.你可以用一個陣列紀錄每次得到峰值的位置
若波形存於x陣列, x陣列大小為size    bool goDown = false;
int lastValue = 0;
int nowValue = 0;
int topValue = 0;

int topPosition[size];  //作為紀錄峰值的位置用
int topCount = 0;
for (int i=0; i < size; i  )
{
   nowValue = x[i];
  
   if (nowValue > lastValue && !goDown )
   {
      lastValue = nowValue ; 
   }
   else if (nowValue < lastValue && !goDown )
   {
      topValue = lastValue; //峰直
      lastValue = nowValue;
      goDown = true; //波形開始往下          topPosition[topCount] = i;
      topCount  ;
   }
   else if ( goDown && nowValue < lastValue)
   {
      lastValue = nowValue;
   } 
   else if ( !goDown && nowValue > lastValue)
   {
      lastValue = nowValue;
      goDown = false; //波形開往上
   }
}    //顯示峰值的位置
for (int j=0; j
PS: 以上的程式我沒實測過:P ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
bee0606
一般會員


發表:22
回覆:30
積分:10
註冊:2003-08-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-09 21:06:36 IP:61.220.xxx.xxx 未訂閱
恩...謝謝先進....給我相當好低想法...我後來是找每個邊緣並紀錄下來..在一尋這範圍找峰值...不過我這方法只能在每個與每個峰並需要有0值存在..這是一個缺點..... 謝謝先進
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-10 11:32:07 IP:211.22.xxx.xxx 未訂閱
我的想法是....    1. 當波形向上時 表示值越大 2. 當波形開始往下時 上一個值及為最大值(峰值) 我的程式可能有問題...你可以試著改改看 ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
braveheart
一般會員


發表:35
回覆:62
積分:24
註冊:2003-05-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-13 01:15:50 IP:61.71.xxx.xxx 未訂閱
謝謝先進...這我有想過...感覺這是最好的方式....不過RUN起來就是不正確....還在DEBUG中.... 不過只要有0的存在...我已可以正確找出每個最大峰值....不過這還是沒解決根本問題..... 謝謝先進....
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-15 11:30:24 IP:139.223.xxx.xxx 未訂閱
我寫了隻程式...測試ok請笑納 < class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { TStrings *values = new TStringList(); bool goDown = false; int lastValue = 0; int nowValue = 0; values->CommaText = "0,1,2,5,3,1,4,6,7,5,2,1,4,6,7,9,1,2,1"; TStrings *topPosition = new TStringList(); //作為紀錄峰值的位置用 TStrings *topValues = new TStringList(); //作為紀錄峰值的至值 for (int i=0; i < values->Count; i ) { nowValue = StrToIntDef(values->Strings[i], -1); if (!goDown && lastValue > nowValue) { topValues->Add(lastValue); topPosition->Add(i-1); } if (lastValue >= nowValue) { goDown = true; } else { goDown = false; } lastValue = nowValue; } //顯示峰值 ShowMessage( "來源值 :" values->CommaText "\r\n" "峰值位置:" topPosition->CommaText "\r\n" "峰值 :" topValues->CommaText ); delete values; delete topPosition; delete topValues; } ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
系統時間:2024-05-18 19:54:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!