1. 灰度化轉換
阿新 • • 發佈:2020-07-04
一、灰度化處理
1. RGB顏色模型一種加色模型,將紅(Red)、綠(Green)、藍(Blue)三原色的色光以不同的比例相加,以產生多種多樣的色光,且三原色的紅綠藍不可能用其他單色光合成。 RGB色彩模式使用RGB模型為影象中每個畫素的RGB分量分配一個0~255範圍內的強度值。RGB影象僅僅使用三種顏色,R(red)、G(green)、B(blue),就能夠使它們依照 不同的比例混合,在螢幕上呈 現 16777216(256 * 256 * 256)種顏色。
2. 灰度化
在RGB模型中,如果R=G=B時,則彩色表示一種灰度顏色,其中R=G=B的值叫灰度值,因此,灰度影象每個畫素只需一個位元組存放灰度值(又稱強度值、亮度值),灰度範圍為0-255。0%的灰 度RGB數值是255,255,255;1%灰度的RGB數值是253,253,253;2%灰度RGB值為250,250,250。 灰度影象與黑白影象不同,在計算機影象領域中黑白影象只有黑白兩種顏色,灰度影象在黑色與白色之間還有許多級的顏色深度 3. 灰度化演算法二、灰度化演算法實現
//分量法 Mat RGB2GrayFromChannels(Mat img) { vector<Mat>chanels; split(img, chanels); Mat r = chanels.at(0); Mat g = chanels.at(1); Mat b = chanels.at(2); return g; } //平均值 Mat RGB2GrayFromAverage(Mat img) { int height = img.rows; int width = img.cols; Matout = Mat::zeros(height, width, CV_8UC1); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { out.at<uchar>(i, j) = (img.at<Vec3b>(i, j)[0] + img.at<Vec3b>(i, j)[1] + img.at<Vec3b>(i, j)[2]) / 3; } }return out; } //加權平均 Mat RGB2GrayFromJiaQuan(Mat img) { int height = img.rows; int width = img.cols; Mat out = Mat::zeros(height, width, CV_8UC1); float a = 0.299; float b = 0.578; float c = 0.114; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { out.at<uchar>(i, j) = a*img.at<Vec3b>(i, j)[0] + b*img.at<Vec3b>(i, j)[1] + c*img.at<Vec3b>(i, j)[2]; } } return out; }
%分量法 %三個通道 gray_image_R = I(:,:,1); gray_image_G = I(:,:,2); gray_image_B = I(:,:,3); figure(1); subplot(1,3,1); imshow(gray_image_R); title("gray_image_R"); subplot(1,3,2); imshow(gray_image_G); title("gray_image_G"); subplot(1,3,3); imshow(gray_image_B); title("gray_image_B");
%平均值法 avergray = zeros(m,n/3); for i = 1:1:m for j = 1:1:n/3 avergray(i,j) = (gray_image_R(i,j)+gray_image_G(i,j)+gray_image_B(i,j))/3; end end figure(3); avergray = uint8(avergray); imshow(avergray);
%加權平均值法 gray = zeros(m,n/3); for i = 1:1:m for j = 1:1:n/3 gray(i,j) = 0.299*gray_image_R(i,j)+0.578*gray_image_G(i,j)+0.114*gray_image_B(i,j); end end figure(4); gray = uint8(gray); imshow(gray);