2016-02-17 98 views
0
for(i=0;i<m_bitmap.bmHeight-1; i++) 
{ 
    for(j=0; j<m_bitmap.bmWidth-1; j++) 
    {     
     r = GetRValue(imagearr1[i][j]); 
     g = GetGValue(imagearr1[i][j]); 
     b = GetBValue(imagearr1[i][j]); 

     temp_r = r/255.00; 
     temp_g = g/255.00; 
     temp_b = b/255.00; 

     /////////////////XYZ conversion//////////////// 

     temp_X = (0.412453*temp_r + 0.357580*temp_g + 0.180423*temp_b); 
     temp_Y = (0.212671*temp_r + 0.715160*temp_g + 0.072169*temp_b); 
     temp_Z = (0.019334*temp_r + 0.119193*temp_g + 0.950227*temp_b); 

     ///////////////Normalisation///////////// 

     X = temp_X/0.950456; 
     Y = temp_Y/1.00; 
     Z = temp_Z/1.088754; 


     if (X > 0.008856) 
     { 
      X = pow(X , (1.00/3.00)); 
     } 
     else 
     { 
      X = (7.787 * X) + (16.00/116.00); 
     } 
     if (Y > 0.008856) 
     { 
      Y = pow (Y , (1.00/3.00)); 
     } 
     else 
     { 
      Y = (7.787 * Y) + (16.00/116.00); 
     } 
     if (Z > 0.008856) 
     { 
      Z = pow (Z , (1.00/3.00)); 
     } 
     else  
     { 
      Z = (7.787 * Z) + (16.00/116.00); 
     } 

     C_L = (116.00 * Y) - 16.00; 
     C_a = (500.00 * (X - Y)+128); 
     C_b = 200.00 * (Y - Z); 


     imagearr2[i][j] = RGB(C_a,C_a,C_a); 
    } 
} 

k=0; 

for(i=m_bitmap.bmHeight-1; i>=0; i--) 
{ 
    for(j=0; j<m_bitmap.bmWidth; j++) 
    { 
      *(byte+k) = GetBValue(imagearr2[i][j]);   
      k++; 
      *(byte+k) = GetGValue(imagearr2[i][j]);   
      k++; 
      *(byte+k) = GetRValue(imagearr2[i][j]);         
      k++; 
    }   

    k=k+padding; 
} 


SetDIBitsToDevice(
    m_hmainmemdc, 0, 0, m_bitmap.bmWidth, m_bitmap.bmHeight, 0, 0 , 0, 
    m_bitmap.bmHeight, byte, &bm,DIB_RGB_COLORS); 
BitBlt(dc.m_hDC,0,0,rect.right,rect.bottom, m_hmainmemdc,0,0, SRCCOPY); 

您好,差異圖像顯示(MATLAB和Visual Studio)

我從RGB轉換的圖像(顏色)LAB色彩空間和顯示它。

我在MATLAB試了一下,以及Visual Studio中,但他們都給予我不同的像(差分它的對比度),(我只在L的一個 B影象一個部分感興趣)。

請參閱我用於在MATLAB和Visual Studio中轉換的代碼。 我檢查了此中的精度錯誤,並理解這兩個編譯器都給了我相同的數字。

相同的公式和邏輯我在MATLAB使用,但是我沒有在最終一個值加128,和用於顯示其我用這個命令

「imshow(C_A,[])」

我想要在MATLAB中得到結果圖像,那我應該使用哪種類型的轉換?

在此先感謝!

的Visual Studio Result Image for Visual Studio

MATLAB Result Image in MATLAB

+0

對於你的matlab圖像,什麼是max(C_a(;))和'class(C_a)'是什麼? – Daniel

+0

我希望你問這個問題(你寫的函數給了我一個matlab中的錯誤)max(max(C_a))= 77.28,min(min(a))= -24.6582,class(C_a)= double。我也讀imshow(C_a,[])增加了圖像的動態範圍,這可能是背後的原因,在這種情況下,我需要的是MATLAB如何做到這一點?謝謝。 –

回答

0

最有可能實際像素強度值是相同的。

我粗略的猜測是你觀察到這種差異的原因是你用imshow(C_a, [])拉伸了可視化的強度範圍。

嘗試純imshow(C_a)並檢查你得到。

+0

我alrady嘗試imshow(C_a)。它會給我一個黑白的圖像。但它仍然與視覺工作室給出的圖像不同。(實際上在C_a中添加128是將圖像轉換爲8位格式我使用此轉換公式來轉換圖像[link] http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html) –