第一部分:分段(線性變換)函數
摘自百度百科:
灰度拉伸又叫:對比度拉伸,它是最基本的一種灰度變換,算法:使用的是最簡單的分段線性變換函數,它的主要思想是提高圖像處理時灰度級的動態范圍。
它可以有選擇的拉伸某段灰度區間以改善輸出圖像。如圖,所示的變換函數的運算結果是將原圖在a到b之間的灰度拉伸到c到d之間。如果一幅圖像的灰度集中在較暗的區域而導致圖像偏暗,可以用灰度拉伸功能來拉伸(斜率>1)物體灰度區間以改善圖像;同樣如果圖像灰度集中在較亮的區域而導致圖像偏亮,也可以用灰度拉伸功能來壓縮(斜率<1)物體灰度區間以改善圖像質量。

原理:函數表達式

第二天睡飽了再看這個函數是如何構造的:選取了四個點(0,0) (x1,y1) (x2,y2) (255,255)
先計算斜率 然后再點斜式,(x1,y1) (x2,y2)自己設定
然后可以不斷調整整個函數的圖像。
分段函數的圖像表達式:

代碼:
function out = MySegmentLinear(I,x1,x2,y1,y2)
%功能:實現灰度圖像的分段線性變換
%理論基礎:http://pan.baidu.com/s/1dFoFuSD
%輸入參數I是uint8類型的灰度圖像數據;
I=im2double(I);
[M,N] = size(I);
out = zeros(M,N);
for i=1:M
for j=1:N
if I(i,j)<x1
out(i,j) = y1 * I(i,j) / x1;
elseif I(i,j)>x2
out(i,j) = (I(i,j)-x2)*(1-y2)/(1-x2) + y2;
else
out(i,j) = (I(i,j)-x1)*(y2-y1)/(x2-x1) + y1;
end
end
end
out=255.*out;
out=uint8(out);
end
第二部分:RGB分別提取出3個圖像出來
_________________________________________________________________________________________________
- >> image = imread('D:\example.jpg');
- >> image_r=image(:,:,1);
- >> image_g=image(:,:,2);
- >> image_b=image(:,:,3);
- >> zero = zeros(size(image_r));
- >> R=cat(3,image_r,zero,zero);
- >> G=cat(3,zero,image_g,zero);
- >> B=cat(3,zero,zero,image_b);
- >> RGB=cat(3,image_r,image_g,image_b);
- >> subplot(2,2,1),imshow(image_r),title('Red component');
- >> subplot(2,2,2),imshow(image_g),title('green component');
- >> subplot(2,2,3),imshow(image_g),title('blue component');
- >> subplot(2,2,4),imshow(RGB),title('original image');

第三部分:彩色圖像對比度增強
image = imread('90.jpg'); %讀取一個圖片
image_r=image(:,:,1); %提取分量組成的圖片
image_g=image(:,:,2);
image_b=image(:,:,3);
Sp_r=MySegmentLinear(image_r,0.3,0.7,0.00,1.00); %R分量組成的圖片進行對比度拉伸
Sp_g=MySegmentLinear(image_g,0.3,0.7,0.00,1.00);
Sp_b=MySegmentLinear(image_b,0.3,0.7,0.00,1.00);
RGB=cat(3,Sp_r,Sp_g,Sp_b);
imshow(RGB);
效果:
原圖:

