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