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

光源問題

尚未結案
YAUYAU
一般會員


發表:38
回覆:26
積分:12
註冊:2003-09-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-30 19:27:07 IP:140.122.xxx.xxx 未訂閱
各位大大好:   想問一個問題,如果不要考慮光源問題的話,用HSI來處理的話,是將I設成固定的值嗎? 現在一點頭緒都沒有,想了很久這問題,但依然無法解決,希望各位大大給我一點意見。      以下是我想處理的Image,第一張可看出亮度比較亮,第二張比較暗,目的是想使用HSI model來忽略光源的問題,請問該如何做呢?    
Fm
初階會員


發表:19
回覆:66
積分:37
註冊:2003-10-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-31 00:40:19 IP:61.62.xxx.xxx 未訂閱
Dear YAUYAU 下面的code參考看看  
 
//---------------------------------------------------------------------------
#include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
struct IHS
{
    int I;
    int H;
    int S;
}IHS[256];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//載入圖形
Graphics::TBitmap* Bitmap = Image1->Picture->Bitmap;
//宣告RGB以及IHS色盤陣列
RGBQUAD rgbQ[256];
memset(rgbQ, 0, 256);
memset(IHS, 0, 256);
//取得Image1的色盤
if (::GetDIBColorTable(Bitmap->Canvas->Handle, 0, 256, rgbQ))
   {
   for (int index = 0; index < 256; index  )
      {
      //-----轉成IHS  ref..數位影像處理 chap4  233
      IHS[index].I=
      IHS[index].S=
      IHS[index].H=
      //---------做些處理
      //
      //------------------
      //-----還原回去 ref..數位影像處理 chap4  p236
      rgbQ[index].rgbBlue = (byte)IHS[index].I;
      rgbQ[index].rgbGreen = (byte)IHS[index].S;
      rgbQ[index].rgbRed = (byte)IHS[index].H;
      }
   //將設好之色盤,指派給Image1使用
   ::SetDIBColorTable(Bitmap->Canvas->Handle, 0, 256, rgbQ);
   //重繪Image1
   Image1->Repaint();
   }
}
//---------------------------------------------------------------------------    
HSI與RGB的轉換公式請自行參考書籍 and參考看看是不是你要的 //--------- 偏聽則誨,兼聽則明 如果那個人是我..那該多好
Fm
初階會員


發表:19
回覆:66
積分:37
註冊:2003-10-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-31 02:04:53 IP:61.62.xxx.xxx 未訂閱
不知道是要改調色盤呢還是要改像素值< > 真素一點基礎也沒有< > 改像素值直的方式可以參考如下
//-------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int y=0;yHeight;y  )
  for (int x=0;xWidth;x  )
     {
     COLORREF pcolor = ::GetPixel( Image1->Canvas->Handle, x, y );
     unsigned int r = ((int)GetRValue(pcolor));
     unsigned int g = ((int)GetGValue(pcolor));
     unsigned int b = ((int)GetBValue(pcolor));
     //----------我不知道公式
     unsigned int i = [xx  xx  xx][r];
     unsigned int h = |xx  xx  xx|[g];
     unsigned int s = [xx  xx  xx][b];
     //----處理一下,,大概是調I吧
       ..........
      ..............
     //----我還是不知公式
     //               -1
      r = [xx  xx  xx]  [i];
      g = |xx  xx  xx|  [h];
      b = [xx  xx  xx]  [s];
     if(r>255) r = 255; if(g>255) g = 255; if(b>255) b = 255;
     //再塞回去
     ::SetPixel(Image1->Canvas->Handle, x, y, RGB(r, g, b));
     }
//更新Image1顯示
Image1->Refresh();
}
//-------------------------------------------------------------------     
//--------- 偏聽則誨,兼聽則明 如果那個人是我..那該多好
YAUYAU
一般會員


發表:38
回覆:26
積分:12
註冊:2003-09-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-31 20:37:42 IP:59.120.xxx.xxx 未訂閱
Fm您好:   首先謝謝你回答我的問題,不過那些程式碼對我來說好像沒有幫助,我修改了我問題,或許之前沒說清楚吧,希望你能再給我一些意見...   順便問一個很笨的問題,什麼影像才叫不受光源影響的影像,如果以 > 發表人 -
Fm
初階會員


發表:19
回覆:66
積分:37
註冊:2003-10-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-01 00:36:16 IP:61.62.xxx.xxx 未訂閱
YAUYAU 您好:
intensity  =gray level [0,255]
hue        =angle[0度.360度]
saturation =percentage[0,1]
1.不考慮光源,處理方式我認為將I設成定值之後再轉回RGB顯示便是
2.3.你期望會有什麼改變???
(我想整體會變(當I_afterI_brfore)或是不變(當I_after==I_brfore))
我的想法是這樣的"同一時間對同一張影像而言,環境太暗(高度下降)或太亮(高度太高)對比色較差,,色調不變(H)(一樣是360度),飽和度不變(S)(半徑).從color model上來看,I便則僅僅I變,I,H,S之間視線性獨立的
4.ref"Digiti image processing" p229 
H=0度,,the color is red
H=60度..,the olor is yellow
5.不了界你的意思...是將I以及S設成定值的意思嗎???
except:
拍照時一定會受光源影響,,所成影像不證自明,,以你po的那兩張圖來看
不考慮光源的話(I ignore),,我不會認為他們的chromaticity(H S)會一樣,,
因為最少半徑(S)會不同..
ps..除第四點有把握外,,其餘保留,,歡迎再討論 /* 偏聽則誨,兼聽則明 *
YAUYAU
一般會員


發表:38
回覆:26
積分:12
註冊:2003-09-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-01 10:37:27 IP:59.120.xxx.xxx 未訂閱
Fm大大您好:   沒錯,第五個問題就是將I,S想成定值,只取H的色調,這樣影像的色調,應該就被歸到360個顏色內了。   剛測試了一下,發現如果將S設為定值,只考慮H,影像完全不能看... 所以如連續影像要不受光源影響的話,無法用
Fm
初階會員


發表:19
回覆:66
積分:37
註冊:2003-10-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-01 12:49:47 IP:59.120.xxx.xxx 未訂閱
YAUYAU您好 我的想法是這樣的 1......剛測試了一下,發現如果將S設為定值,只考慮H,影像完全不能看... 我想妳看到的圖形應該是含有各種顏色的一張圖吧! 一張影像是由RGB(IHS...)所建立而成,將他的兩個變數設成常數,,以RGB來看他會變成一條直線,,以IHS來看則成一個圓(I=常數,S=常數) 2.所以如連續影像要不受光源影響的話,無法用HSI做到囉? 是否可以將所有得到的影像轉成IHS model,將I設成定值(每張都一樣),,再轉回RGB來顯示 請問如果是調整長條圖,可以將不同亮度的影像修正的差不多嗎? 嗯,,若單純只因為光源問題,,我想妳是對的
YAUYAU
一般會員


發表:38
回覆:26
積分:12
註冊:2003-09-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-01 13:44:35 IP:59.120.xxx.xxx 未訂閱
引言: YAUYAU您好 我的想法是這樣的 1......剛測試了一下,發現如果將S設為定值,只考慮H,影像完全不能看... 我想妳看到的圖形應該是含有各種顏色的一張圖吧! 一張影像是由RGB(IHS...)所建立而成,將他的兩個變數設成常數,,以RGB來看他會變成一條直線,,以IHS來看則成一個圓(I=常數,S=常數) 2.所以如連續影像要不受光源影響的話,無法用HSI做到囉? 是否可以將所有得到的影像轉成IHS model,將I設成定值(每張都一樣),,再轉回RGB來顯示 請問如果是調整長條圖,可以將不同亮度的影像修正的差不多嗎? 嗯,,若單純只因為光源問題,,我想妳是對的
Fm大大您好: 承如你之前說的,每一張影像一定會受光源影響,如不考慮I, 其chromaticity(H S)中,半徑(S)也不同,就算將I值設成定值也無法做到。 (之前就跑過程式了,但結果還是一樣,現在終於知道原因了 ) 努力了很久,才知道 >
Fm
初階會員


發表:19
回覆:66
積分:37
註冊:2003-10-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-01 14:34:54 IP:220.130.xxx.xxx 未訂閱
YAUYAU你好 這個實驗怎麼樣???? //---- 1.取下第一張圖之後,轉成ihs model,此時你得到一個I1[size_x][size_y];H1[][],S1[][] 2.調整光源其餘不變 3.取夏得第二張圖形,轉成ihs model,的到I2,H2,S2,用I1,H2,S2轉成rgb,來顯示 4.比較這兩張圖...(我直覺告訴我說這兩張還是會不同,因為原本的(H+S不一樣,面積大小不一樣). //------- 另外 ...用長條圖來調整光源的問題,該從哪下手研究呢? 是像這樣的方式嗎 0
YAUYAU
一般會員


發表:38
回覆:26
積分:12
註冊:2003-09-25

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-04-01 16:21:48 IP:59.120.xxx.xxx 未訂閱
Fm大大您好:   我決定要找別的方法了,感謝你的幫忙 
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-04-01 17:12:05 IP:140.129.xxx.xxx 未訂閱
YAUYAU 您好:    有個建議您不妨參考看看: Rafael C. Gonzalez, et al., "Digital Image Processing," 2/e. 第3.3.2節中提到的方法,histogram matching or histogram specification.    大概的想法是: 以另一張已知圖像的直方分佈(histogram)來替換原來影像的直方分佈。    因為您的圖形大致差不多,只是亮度可能因拍攝條件的不同而使得影像品質有差異。 所以如果您能找到一張相對好的圖形,記下它的直方分布,再套用在其他圖上,對於亮度應該會有改善的。    您參考看看!
YAUYAU
一般會員


發表:38
回覆:26
積分:12
註冊:2003-09-25

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-04-01 21:16:04 IP:61.57.xxx.xxx 未訂閱
richtop大大您好: 我不太懂你所說的意思,如何替換原來的影像呢? 有演算法or程式可以參考嗎?  謝謝喲   <>< face="Verdana, Arial, Helvetica">引言: YAUYAU 您好: 有個建議您不妨參考看看: Rafael C. Gonzalez, et al., "Digital Image Processing," 2/e. 第3.3.2節中提到的方法,histogram matching or histogram specification. 大概的想法是: 以另一張已知圖像的直方分佈(histogram)來替換原來影像的直方分佈。 因為您的圖形大致差不多,只是亮度可能因拍攝條件的不同而使得影像品質有差異。 所以如果您能找到一張相對好的圖形,記下它的直方分布,再套用在其他圖上,對於亮度應該會有改善的。 您參考看看! >< face="Verdana, Arial, Helvetica">
m58610
初階會員


發表:22
回覆:83
積分:36
註冊:2003-09-07

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-04-01 22:12:04 IP:140.118.xxx.xxx 未訂閱
Rafael C. Gonzalez, et al., "Digital Image Processing," 2/e. 4.5節中Homomorphic Filtering 也是一個將物體反射跟光源分離的filter 不過用法滿複雜的 要作ln -> 負利葉 -> LPF(留下光源) or HPF(留下物體反射) -> 反負利葉 -> EXP
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-04-02 01:00:57 IP:211.76.xxx.xxx 未訂閱
YAUYAU 您好:    
引言: richtop大大您好: 我不太懂你所說的意思,如何替換原來的影像呢? 有演算法or程式可以參考嗎? 謝謝喲 < face="Verdana, Arial, Helvetica"> 想像已知第一張圖的histogram,而現在希望第二張圖的histogram就跟第一張圖一樣。所以必須利用機率中的累積機率分布函數來達成這個目標,相關細節請參考前述所提相關書籍,一時間還說不清楚。 我嘗試用您的第一張圖(相對較亮)所取得的histogram分布,將之套用再第二張圖上,好像有改善,轉換後的結果如下:(左:轉換後,右:轉換前) 我的想法是:如果能找一張類似但十分清晰的參考圖,利用它來轉換其它的影像,似乎能得到好的結果。 這部分恐怕需要您再嘗試與確認! 程式如下連結,因為是從我之前寫的程式中擷取出來的,但求能給您一個參考,因此一切從簡!所以可讀性或許不太高,如果您要研究可能得花些功夫了! < href="http://delphi.ktop.com.tw/loadfile.php?TOPICID=21367271&CC=477869">http://delphi.ktop.com.tw/loadfile.php?TOPICID=21367271&CC=477869 RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
Fm
初階會員


發表:19
回覆:66
積分:37
註冊:2003-10-15

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-04-02 09:47:44 IP:61.62.xxx.xxx 未訂閱
< >< >
YAUYAU
一般會員


發表:38
回覆:26
積分:12
註冊:2003-09-25

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-04-02 13:29:59 IP:59.120.xxx.xxx 未訂閱
richtop大大您好:   剛看過您的程式了,有一點疑惑,在toHistogramize那個function中 主要做的是先將image轉成灰階,取出明度分佈後的這段程式碼可以註解一下嗎? 看不懂最重要的部分   < class="code"> //factor意義? factor = 1./((float)mWidth*mHeight); //我看了DIP的機率公式 ,這個for迴圈就是積分嗎? hist[0] *= factor; // form Pr(r) to T(r) for (row=1; row<256; row ) { hist[row] *= factor; hist[row] = hist[row-1]; if ( hist[row]>1 ) hist[row]=1.0; } // 還是不懂以下再做什麼 // from Tr(r) equal to s[.] int gray, z; float pz, level; factor = 1.0/256; if ( withModel ) // hist[.] is the s[.] { z=0; for (gray=0; gray<256; gray ) { while ( hist[gray]>mDisModel[z] ) { if ( z>255 ) { z = 255; break; } } //dis[z]=hist[gray]; hist[gray] = z; } } else { for (gray=0; gray<256; gray ) hist[gray]=gray; } index=0L; 謝謝
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-04-03 20:57:24 IP:211.76.xxx.xxx 未訂閱
YAUYAU 您好:    程式碼部分說明如下,請參考。    
// 歸一化累積機率密度函數
  factor = 1./((float)mWidth*mHeight);
  hist[0] *= factor; // form Pr(r) to T(r)
  for (row=1; row<256; row  )
     { hist[row] *= factor;
       hist[row]  = hist[row-1];
       if ( hist[row]>1 ) hist[row]=1.0;
     }
  // from Tr(r) equal to s[.]
  // 使用累積機率密度函數相等的概念,將影像灰階值的轉換對應關係找出來。
  //
  int  gray, z;
  float pz, level;
  factor = 1.0/256;      if ( withModel )  // hist[.] is the s[.]
    { z=0;
      for (gray=0; gray<256; gray  )
         { while ( hist[gray]>mDisModel[z] ) // 條件成立表示目前(hist[.])累積的結果比
             { if (   z>255 )                // 希望達到的(mDisModel[.])還多,也就是
                 { z = 255;                  // 說需要將此刻的灰階值轉換成更高的值,
                   break;                    // 這麼一來,就能讓mDisModel[.]的
                 }                           // 值追上來。而灰階值轉換就是根據
             }                               // 這個原理找出來的。
      //dis[z]=hist[gray];
           hist[gray] = z;             }
    }
  else
    { for (gray=0; gray<256; gray  ) hist[gray]=gray;
    }
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
JerryKuo
版主


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

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-04-04 10:42:51 IP:220.135.xxx.xxx 未訂閱
引言: 各位大大好: 我想問一個跟光源有關的問題 1. 如果不考慮光源的影響,該怎麼處理影像?影像最後的顯現結果為何? 2. 我的想法如下: 先將影像轉到HSI domain上,然後對I值處理,如果將I值設成常數,如128的話,再轉回RGB顯像,影像會改變嗎? 我覺得這樣應該是會改變的,但是結果並沒有改變 >< face="Verdana, Arial, Helvetica"> YAUYAU你好: 推薦一個HSV網站給你參考,裡面有一個程式,玩玩看,希望對你有幫助 [url="http://www.efg2.com/Lab/Graphics/Colors/HSV.htm"]HSV[/url] [url="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40479"][問題]HSV的轉換[/url]
YAUYAU
一般會員


發表:38
回覆:26
積分:12
註冊:2003-09-25

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-04-08 10:28:28 IP:140.122.xxx.xxx 未訂閱
感謝Fm大大、richtop大大、JerryKuo學長的幫忙 三位都有幫助我觀念上的釐清,也讓我對光源問題有了更進一步的了解 但是,只能有一位得分者... 想了很久,覺得Fm大大花了很多時間跟我討論..所以.... 但還是由衷的感謝
系統時間:2024-05-13 18:10:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!