從RGB矩陣值轉影像問題 |
尚未結案
|
fu3751
一般會員 發表:16 回覆:10 積分:5 註冊:2004-04-05 發送簡訊給我 |
讀取一180X240的點陣圖
將該圖RBG值分別置於三個矩陣
將RGB矩陣經過一連串矩陣運算後
得到r3,g3,b3三個矩陣並轉換成影像
最後與原影像做比較 在最後r3,g3,b3轉影像產生錯誤
請高手解惑 程式測試到矩陣轉影像處以前都沒問題 int i,j;
Byte *ptr; Graphics::TBitmap *Bmp1=new Graphics::TBitmap();
Bmp1->Assign(Image1->Picture->Bitmap);
float r[180][240],g[180][240],b[180][240]; //取得RGB
static double l[180][240],m[180][240],s[180][240]; //取得lms
static double L[180][240],M[180][240],S[180][240]; //取得LMS
static double A[180][240],B[180][240],C[180][240]; //取得lab static double L2[180][240],M2[180][240],S2[180][240]; //回復取得LMS
static double l2[180][240],m2[180][240],s2[180][240]; //回復取得lms
static double r2[180][240],g2[180][240],b2[180][240]; //回復取得RGB
Byte r3[180][240],g3[180][240],b3[180][240]; //轉換RGB為Byte型態 for(j=0;j< Bmp1->Height; j++)
{
for(i=0;i< Bmp1->Width; i++)
{
r[j][i]=GetRValue(Bmp1-> Canvas-> Pixels[j][i]);
g[j][i]=GetGValue(Bmp1-> Canvas-> Pixels[j][i]);
b[j][i]=GetBValue(Bmp1-> Canvas-> Pixels[j][i]);
if(r[j][i]==0 && g[j][i]==0 && b[j][i]==0)
{r[j][i]=0.003922;g[j][i]=0.003922;b[j][i]=0.003922;} l[j][i]=(0.3811*r[j][i]/255) + (0.5783*g[j][i]/255) + (0.0402*b[j][i]/255);
m[j][i]=(0.1967*r[j][i]/255) + (0.7244*g[j][i]/255) + (0.0782*b[j][i]/255);
s[j][i]=(0.0241*r[j][i]/255) + (0.1288*g[j][i]/255) + (0.8444*b[j][i]/255); L[j][i]=log10(l[j][i]);
M[j][i]=log10(m[j][i]);
S[j][i]=log10(s[j][i]); A[j][i]=(1/sqrt(3)*L[j][i]) + (1/sqrt(3)*M[j][i]) + (1/sqrt(3)*S[j][i]);
B[j][i]=(1/sqrt(6)*L[j][i]) + (1/sqrt(6)*M[j][i]) + (-2/sqrt(6)*S[j][i]);
C[j][i]=(1/sqrt(2)*L[j][i]) + (-1/sqrt(2)*M[j][i]); L2[j][i]=(sqrt(3)/3*A[j][i]) + (sqrt(6)/6*B[j][i]) + (sqrt(2)/2*C[j][i]);
M2[j][i]=(sqrt(3)/3*A[j][i]) + (sqrt(6)/6*B[j][i]) + (sqrt(2)/-2*C[j][i]);
S2[j][i]=(sqrt(3)/3*A[j][i]) + (sqrt(6)/-3*B[j][i]); l2[j][i]=pow(10,L2[j][i]);
m2[j][i]=pow(10,M2[j][i]);
s2[j][i]=pow(10,S2[j][i]); r2[j][i]=(4.4679*l2[j][i]*255) + ((-3.5873)*m2[j][i]*255) + (0.1193*s2[j][i]*255);
if(r2[j][i]>255)
r2[j][i]=255;
if(r2[j][i]<0)
r2[j][i]=0;
r3[j][i]=(Byte)r2[j][i];
g2[j][i]=((-1.2186)*l2[j][i]*255) + (2.3809*m2[j][i]*255) + ((-0.1624)*s2[j][i]*255);
if(g2[j][i]>255)
g2[j][i]=255;
if(g2[j][i]<0)
g2[j][i]=0;
g3[j][i]=(Byte)g2[j][i];
b2[j][i]=(0.0497*l2[j][i]*255) + ((-0.2439)*m2[j][i]*255) + (1.2045*s2[j][i]*255);
if(b2[j][i]>255)
b2[j][i]=255;
if(b2[j][i]<0)
b2[j][i]=0;
b3[j][i]=(Byte)b2[j][i]; }
}
for(j=0;j
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
fu3751 您好: 檢視後發現兩個問題,您先參考一下:
1.Canvas-> Pixels[x][y]的使用順序是:先x(column,水平方向)後y(row,垂直方向),您似乎用反了。
2.寬高部分的索引都是從零開始,所以只能算到寬高減一處,如下:
for (j=0; j < Bmp1->Height-1; j ) { for(i=0; i < Bmp1->Width-1; i )RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
fu3751
一般會員 發表:16 回覆:10 積分:5 註冊:2004-04-05 發送簡訊給我 |
richtop您好 我把程式做如下修正還是出現相同錯誤訊息
不知是修正有錯 還是哪裡出了問題
for(j=0;j發表人 - fu3751 於 2004/09/13 10:37:41 發表人 - fu3751 於 2004/09/13 10:46:42 |
fu3751
一般會員 發表:16 回覆:10 積分:5 註冊:2004-04-05 發送簡訊給我 |
我將程式修正後
還是出現相同錯誤訊息
不知哪裡出錯 我覺得是矩陣轉影像
請協助解決 謝謝
for(j=0;j |
TheMoon
中階會員 發表:17 回覆:95 積分:67 註冊:2002-06-05 發送簡訊給我 |
不曉得是不是因為你沒有設定Image2->Picture->Bitmap的相關屬性而造成錯誤,
我將程式修改如下可以正常work:
... ... ... Graphics::TBitmap *Bmp2=new Graphics::TBitmap(); Bmp2->PixelFormat=Bmp1->PixelFormat; Bmp2->Height=Bmp1->Height; Bmp2->Width=Bmp1->Width; for(j=0;j<Bmp2->Height;j ) //RGB矩陣轉影像 { ptr=(Byte *)Bmp2->ScanLine[j]; int index=0; for(i=0;i |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
fu3751 您好: 非常抱歉,因為一下寫Delphi,一下用BCB,所以講對但範例給錯了!
在>< face="Verdana, Arial, Helvetica">引言:
for(j=0;jRichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
fu3751
一般會員 發表:16 回覆:10 積分:5 註冊:2004-04-05 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
fu3751 您好: 由您的結果來看,兩圖的大小並不一樣,所以有必要對它們的PixelFormat作一檢視。因為您用的圖是Borland所附的256色圖檔,PixelFormat可能是pf8bit。
另外您做了很多的運算,在最後才show出結果,因此到底在哪一個環節出錯,恐怕不容易看出來。所以建議您可以將各階段的運算結果先秀出來,比方說,在取得各點顏色之後,可以先秀一下或故意轉成灰階之類的來驗證讀入的資料,等確認無誤之後,再進行下一步的轉換,這樣比較容易找出問題點來,以利修正。
供您參考!
|
TheMoon
中階會員 發表:17 回覆:95 積分:67 註冊:2002-06-05 發送簡訊給我 |
|
fu3751
一般會員 發表:16 回覆:10 積分:5 註冊:2004-04-05 發送簡訊給我 |
|
TheMoon
中階會員 發表:17 回覆:95 積分:67 註冊:2002-06-05 發送簡訊給我 |
引言: 再次感謝richtop,TheMoon二位幫忙 richtop給我觀念上啟發 但是TheMoon幫我解決問題 所以我把分數給了TheMoon 另外請教一下 為什麼讀取24bitsbmp圖檔轉後能成功 而讀取8bits圖檔轉換後圖形卻變了樣請參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=55371 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |