全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2952
推到 Plurk!
推到 Facebook!

請問關於RGB轉HSI....

尚未結案
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-09 13:59:13 IP:61.59.xxx.xxx 未訂閱
小弟只知道轉成YIQ的Y值帶回RGB的值裡就是所謂的轉灰階 請問大家 , 轉成灰階後的圖 可以稱他是一個物體的亮度圖嗎?    最近翻版上的文章知道轉HSV的大概 好像就是可以減少光的強弱變化,通常影像辨識很需要這點 那轉HSV跟轉YIQ是不一樣在哪呢? 請問HSV的公式中,最後得到的H值也是跟轉灰階一樣 把RGB三個值都帶入H麼? 因為小弟參考的書並未詳述轉HSV後的圖 不曉得轉HSV後的圖應該是長得如何 小弟參考 http://delphi.ktop.com.tw/topic.php?topic_id=57705 發文大大所公佈的程式碼    組合成下面的程式碼 不過結果怪怪的說 如下 結果變成下面 這個結果應該是完全不對的吧? 小弟實在不了解公式哪裡錯了 還有上幾個觀念不太了解的問題 請大大解惑一下 感謝
 
double min(double a,double b)
{
 if(a>=b)
 return(a);
 else
 return(b);
 }    void __fastcall TForm1::Button7Click(TObject *Sender)
{
   Graphics::TBitmap *Bmp = new Graphics::TBitmap();
    Byte *ptr;
    double r,g,b;
    double hh,ss,ii;
    double temp;
    float pi=3.1416;
    Bmp->Assign(Image1->Picture->Bitmap);
    for(int j=0;jHeight;j++)
    {
      ptr = (Byte *)Bmp->ScanLine[j];
      for(int i=0;iWidth;i++)
      {
        b=ptr[i*3];
        g=ptr[i*3+1];
        r=ptr[i*3+2];            ii=(r+g+b)/3;  //計算Intensity            if((r+g+b)==0)
          ss=0;
        else
          ss=1-(3*(min(min(r,g),b))/(r+g+b));  //計算Saturation            if((((r-g)*(r-g))+((r-b)*(g-b)))==0)
          hh=0;
        else{
          temp=((r-g)+(r-b))/(2*sqrt(((r-g)*(r-g))+((r-b)*(g-b))));
          if(g>=b)
            hh=acos(temp);  //計算Hue,徑度量
            //hh=acos(temp)*180/pi;  //計算Hue,度度量
          else
            hh=2*pi-acos(temp);  //計算Hue,徑度量
            //hh=(2*pi-acos(temp))*180/pi;  //計算Hue,度度量
         }          if(hh>=0&&hh<=2*pi/3){
          b=(1-ss)*ii;
          r=(1+ss*cos(hh)/cos(pi/3-hh))*ii;
          g=3*ii-(r+b);
        }
        if(hh>2*pi/3&&hh<=4*pi/3){
          r=(1-ss)*ii;
          g=(1+ss*cos(hh-2*pi/3)/cos(pi-hh))*ii;
          b=3*ii-(r+g);
        }
        if(hh>4*pi/3&&hh<=2*pi){
          g=(1-ss)*ii;
          b=(1+ss*cos(hh-4*pi/3)/cos(5*pi/3-hh))*ii;
          r=3*ii-(g+b);
        }
        ptr[i*3]=(Byte)b;
        ptr[i*3+1]=(Byte)g;
        ptr[i*3+2]=(Byte)r;          }
    }        Image1->Picture->Bitmap->Assign(Bmp);
}    
1666362
初階會員


發表:66
回覆:124
積分:43
註冊:2004-07-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-09 17:46:09 IP:61.222.xxx.xxx 未訂閱
請把下面地方做修改 Bmp->Assign(Image1->Picture->Bitmap); Bmp->PixelFormat=pf24bit;<---加入這一行    if(hh>=0&&hh<2*pi/3) <---修改 if(hh>=2*pi/3&&hh<4*pi/3)<---修改 if(hh>=4*pi/3&&hh<=2*pi)<---修改 程式碼跑過了 把您的程式碼修改成 我上面更正的 就沒問題了 我是新手 多多指教 ^^
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-09 18:41:25 IP:61.59.xxx.xxx 未訂閱
多謝您的回應喔 請問結果是應該有點偏藍嗎?    請問轉成這樣之後的圖形,還是有紅藍之類的色澤 這是在告訴我們什麼意思呢?    再請一下喔 今天我需要做一個求邊緣的圖形 有時候光線會影響圖形的邊緣強弱 那轉HSV有幫助改善麼 謝謝    
引言: 請把下面地方做修改 Bmp->Assign(Image1->Picture->Bitmap); Bmp->PixelFormat=pf24bit;<---加入這一行 if(hh>=0&&hh<2*pi/3) <---修改 if(hh>=2*pi/3&&hh<4*pi/3)<---修改 if(hh>=4*pi/3&&hh<=2*pi)<---修改 程式碼跑過了 把您的程式碼修改成 我上面更正的 就沒問題了 我是新手 多多指教 ^^
1666362
初階會員


發表:66
回覆:124
積分:43
註冊:2004-07-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-09 18:58:36 IP:61.222.xxx.xxx 未訂閱
不清楚ㄝ 我沒試驗您的code 發表人 - 1666362 於 2004/12/09 19:04:06
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-10 01:05:02 IP:218.168.xxx.xxx 未訂閱
xdio2你好:    提供站內的一篇文章給你參考:    【問題】請問HSV的轉換  http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40479
wei7278
一般會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-10 16:05:43 IP:61.228.xxx.xxx 未訂閱
您好: 好熟悉的程式碼阿,好像是我寫的,呵呵 之前那一篇我唯一錯的地方你已經修正了(hh>=0) 我看了一下,你只是出了一點小錯 那就是你的min fuction 寫反了,改過應該就ok了 忘了說一件事,你把我的兩段程式碼合併的話,會從RGB轉到HSI又轉回RGB,所以秀出來的結果應該是和原圖一模一樣 發表人 - wei7278 於 2004/12/10 16:18:04
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-11 15:20:38 IP:218.166.xxx.xxx 未訂閱
多謝板主大大的提供喔 小弟已經去參考過了,不過似乎能夠解決光影的效果還是有限說... 跟我直接轉灰階來作處理似乎沒有更大的好處 請問板主大大有可以解決光影影響顏色的處理方式嘛? 謝謝喔~    
引言: xdio2你好: 提供站內的一篇文章給你參考: 【問題】請問HSV的轉換 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40479
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-11 15:20:56 IP:218.166.xxx.xxx 未訂閱
多謝板主大大的提供喔 小弟已經去參考過了,不過似乎能夠解決光影的效果還是有限說... 跟我直接轉灰階來作處理似乎沒有更大的好處 請問板主大大有可以解決光影影響顏色的處理方式嘛? 謝謝喔~    
引言: xdio2你好: 提供站內的一篇文章給你參考: 【問題】請問HSV的轉換 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40479
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-11 15:30:39 IP:218.166.xxx.xxx 未訂閱
大大不好意思喔 我是有文章著名是拿您的程式碼來用 不曉得是否冒犯您了?    順便請問一下 我這樣轉成HSV又轉成RGB可以改善什麼嗎 我是聽說HSV可以改善光線的影響 所以試了您的程式碼一下 不過小弟才疏學淺...看不出變化哩... 還是說可以跟轉成灰階一樣 我把H值都帶入RGB三個值裡 小弟實在不懂轉HSV如何利用...    另外請問您使用轉HSV的方式跟Kuo版大提供的連結 是同樣的公式嗎? 以上的問題,勞煩大大,多謝~    
引言: 您好: 好熟悉的程式碼阿,好像是我寫的,呵呵 之前那一篇我唯一錯的地方你已經修正了(hh>=0) 我看了一下,你只是出了一點小錯 那就是你的min fuction 寫反了,改過應該就ok了 忘了說一件事,你把我的兩段程式碼合併的話,會從RGB轉到HSI又轉回RGB,所以秀出來的結果應該是和原圖一模一樣 發表人 - wei7278 於 2004/12/10 16:18:04
wei7278
一般會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-11 17:58:28 IP:61.228.xxx.xxx 未訂閱
您好: 不知道這一篇可不可以解決您的問題 http://delphi.ktop.com.tw/topic.php?topic_id=37831 您應該是先將RGB轉HSI,做完您要的處理後,再轉回RGB秀出來 如果您想看轉HSI的結果就必須正規化到RGB許可的範圍0~255 您可以參考一下轉換公式 這篇是我之前問過的問題 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=57166
系統時間:2024-07-08 14:47:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!