灰度变换之灰度线性拉伸(算法1)
第一部分:分段(线性变换)函数
摘自百度百科:
灰度拉伸又叫:对比度拉伸,它是最基本的一种灰度变换,算法:使用的是最简单的分段线性变换函数,它的主要思想是提高图像处理时灰度级的动态范围。
它可以有选择的拉伸某段灰度区间以改善输出图像。如图,所示的变换函数的运算结果是将原图在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);
效果:
原图:
posted on 2018-01-24 22:22 多情剑客无情剑; 阅读(14530) 评论(1) 编辑 收藏 举报