2017-01-28 59 views

回答

2

你可能有問題,因爲r_pixelb_pixelg_pixel是整數,因此,當你嘗試採取三個平均,你得到不正確的結果,因爲這些數字的任何添加或劃分被迫成爲一個uint8的意義,你不能正確的值相加在一起,如果紅色,綠色和藍色都是255

uint8(255) + uint8(255) + uint8(255) 
% 255 

你會想先將它們全部轉換爲浮點數。

gray_pixel = (double(r_pixel) + double(g_pixel) + double(b_pixel))/3; 

如果你真的需要一個uint8灰度圖像,然後你可以把結果作爲uint8

gray_pixel = uint8(gray_pixel); 

話雖這麼說,這是不是真的要創建從一個灰度圖像的最佳方式RGB圖像。與MATLAB最簡單的方法是隻使用內置功能rgb2gray

grayim = rgb2gray(img); 

至於他們使用的實際製劑爲BT.601

gray_pixel = 0.2989 * r_pixel + 0.5870 * g_pixel + 0.1140 * b_pixel; 
+0

我需要這個值爲單個像素。這似乎工作正常。謝謝。 :) – Rohit

0

在另外的勸告以上使用rgb2gray,我想要說你的公式的問題,那是一個不適合uint8的總和,因爲它以255爲界。你可以先將數字轉換爲uint16,計算平均值,然後將結果轉換爲uint8。

gray_pixel = uint8([uint16(r_pixel) + uint16(g_pixel) + uint16(b_pixel)]/3)