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

我的HSI的直方圖怪怪的耶…

尚未結案
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-04 02:14:59 IP:211.76.xxx.xxx 未訂閱
我寫了一段程式我畫出HSI的Hitogram,但是怎麼覺得Hue和Saturation的直方圖怪怪的,麻煩大大幫忙看看是哪裡出了問題呢?     void __fastcall TForm1::RGBtoHueClick(TObject *Sender) {         Graphics::TBitmap *Bmp = new Graphics::TBitmap();         Bmp->Assign(Image1->Picture->Bitmap);         Byte *ptr;         Byte B,G,R;            double Hue,saturation,intensity;         double pi=3.1415926;         double temp;            if(!chart1clear)                 Series1->Clear();            for (int i=0;iHeight;i++) { ptr=(Byte *)Bmp->ScanLine[i]; for(int j=0;jWidth;j++) { B=ptr[3*j]; G=ptr[3*j+1]; R=ptr[3*j+2]; if((((R-G)*(R-G))+((R-B)*(G-B)))==0) Hue=0; else { temp=((R-G)+(R-B))/(2*sqrt(((R-G)*(R-G))+((R-B)*(G-B)))); if(B>=G) Hue=acos(temp)*180.0/pi; else Hue=(2*pi-acos(temp))*180.0/pi; } H[(int)Hue]++; } } for(int m=0;m<=355;m++) Series1->AddXY(m,H[m],"",clRed); for(int n=0;n<=355;n++) H[n]=0; chart1clear = false; delete Bmp; } //--------------------------------------------------------------------------- void __fastcall TForm1::RGBtoSaturationClick(TObject *Sender) { Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Bmp->Assign(Image1->Picture->Bitmap); Byte *ptr; Byte B,G,R; if(!chart2clear) Series2->Clear(); double Hue,saturation,intensity; for (int i=0;iHeight;i++) { ptr=(Byte *)Bmp->ScanLine[i]; for(int j=0;jWidth;j++) { B=ptr[3*j]; G=ptr[3*j+1]; R=ptr[3*j+2]; if((R+G+B) == 0) saturation = 0; else saturation = 1-(3*(min(min(R,G),B))/(R+G+B)); S[(int)saturation]++; } } for(int m=0;m<=355;m++) Series2->AddXY(m,S[m],"",clBlue); for(int n=0;n<=355;n++) S[n]=0; chart2clear = false; delete Bmp; } 發表人 - teresa_chang 於 2005/10/04 22:58:12
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-04 09:38:01 IP:210.68.xxx.xxx 未訂閱
您好:    PO程式碼的方式與版規說明請參考下面連結,煩請修改謝謝您的配合 >
wei7278
一般會員


發表:16
回覆:19
積分:12
註冊:2004-09-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-06 21:53:55 IP:59.112.xxx.xxx 未訂閱
您好: 我看了一下 您轉Hue的時候有個條件寫錯了
if(B>=G)
   Hue=acos(temp)*180.0/pi;
應該是if(G>=B) 至於S的話 因為它的值只有0~1 由於您硬轉成整數 所以只會有兩種值 建議您把S分成多個段比較容易看出它的分佈 發表人 - wei7278 於 2005/10/06 21:58:55
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-07 00:57:28 IP:211.76.xxx.xxx 未訂閱
嗯~~我的hue的條件給錯了, 我求出來的saturation是介於0~1, 如果我把這段程式S[(int)saturation] ;之前加上 saturation = saturation *100; 這樣它的小數點不是應該都會變成整數嗎? 但是為什麼我的圖變成在100左右的地方呈現一條直線, 而且我單看saturation的值幾乎全部都為0耶! 這是為什麼呢? 另外,你所說的分段來看的意思又為何呢?
wei7278
一般會員


發表:16
回覆:19
積分:12
註冊:2004-09-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-07 12:43:12 IP:59.112.xxx.xxx 未訂閱
您好: 看您的說法應該都沒什麼問題 可能要請您把修改過的程式碼再貼出來 另外我說分段的意思是將0到1分成好幾段 您所做的saturation = saturation *100 就是在分段 乘以多少就是分幾段
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-07 17:41:41 IP:59.115.xxx.xxx 未訂閱
我的問題已經自己解決了! 謝謝了…
akway
一般會員


發表:1
回覆:11
積分:2
註冊:2006-08-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-12 12:28:54 IP:140.113.xxx.xxx 未訂閱
可以請你分享你的解決方法給大家嗎?
回答你回題的人也會很想知道你的解決方法
===================引 用 Teresa_Chang 文 章===================
我的問題已經自己解決了! 謝謝了…
系統時間:2024-11-25 14:30:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!