灰度变换增强
灰度变换主要针对独立的像素点进行处理,由输入像素点的灰度值决定相应的输出像素点的灰度值,通过改变原始图像数据所占的灰度范围而使图像在视觉上得到改善。
1、线性灰度增强
线性灰度增强,将图像中所有点的灰度按照线性灰度变换函数进行变换。在曝光不足或过度的情况下,图像的灰度可能局限在一个很小的灰度范围内,这时图像可能会很模糊不清。利用一个线性单值函数对图像内的每一个像素做线性拓展,将会有效地改善图像的视觉效果。
基本原理:假设一幅图像f(x,y)变换前的的灰度范围是[a, b],希望变换后g(x,y)灰度范围拓展或者压缩至[c, d]
,则灰度线性变换函数表达式为:
g
(
x
,
y
)
=
[
d
−
c
b
−
a
]
(
f
(
x
,
y
)
−
a
+
c
)
.
g(x,y) = [\displaystyle { \frac{d-c}{b-a}}](f(x,y)-a+c).
g(x,y)=[b−ad−c](f(x,y)−a+c).通过调整a,b,c,d,的值可以控制线性变换函数的斜率,从而达到灰度范围的拓展或压缩。
线性代码
%线性点运算
img = imread('nut.bmp');
figure;subplot(1,2,1);imshow(img);title('原图');
img = rgb2gray(img);
img = double(img);
[ROW, COL] = size(img);
max = 0;
imgNew = zeros(ROW, COL);
for i = 1:ROW
for j = 1:COL
if max < img(i, j)
max = img(i, j) ;
end
imgNew(i, j) = img(i, j) .*1.5 ;
end
end
subplot(1,2,2);imshow(uint8(imgNew));title('运算后');
2 、分段线性灰度增强
分段线性灰度增强可将需要的图像细节灰度级扩展,增强对比度,将不需要的图像细节灰度级压缩。
基本原理:假设输入图像f(x,y)的灰度为0 ~ M级,增强后图像g(x,y)的灰度级0 ~ N级,区间[a, b]、[c,d]分别为源图像和增强图像的某一灰度区间。分段线性变换函数为:
3、非线性灰度增强
非线性代码
%非线性点运算
imgAerial = imread('Aerial photography_source.bmp');
imgAerialRGB = rgb2gray(imgAerial);
imgAerialRGBDouble = double(imgAerialRGB);
figure;subplot(1,2,1);imshow(imgAerial);title('原图');
subplot(1,2,2);imshow(imgAerialRGB);title('灰度化原图');
[ROWAerial, COLAerial] = size(imgAerialRGBDouble);
imgNewAerialIndex = 1.5 .^ (imgAerialRGBDouble*0.07) -1;%指数运算
imgNewAerialIndex(find(imgNewAerialIndex>255)) = 255;
imgNewAerialPow = 255 * (imgAerialRGBDouble/255) .^1.8;%幂运算
figure;subplot(1,2,1);imshow(uint8(imgNewAerialIndex));title('指数运算图像');
subplot(1,2,2);imshow(uint8(imgNewAerialPow));title('幂运算图像');