【三】图像的点运算

1 灰度直方图
就是灰度级的统计图,横向是灰度级,纵向是出现的次数 。
1.1 一般直方图
实现
I = imread('pout.tif');%读取图像figure;%打开一个窗口imshow(I);title('Source');%显示源图像figure;%打开另一个窗口imhist(I);title('Histogram');%显示直方图
1.2 归一化直方图
为便于统计,可根据区间统计灰度级,进行归一化 。
实现
I = imread('pout.tif');figure;[M,N] = size(I);%计算图像大小[counts,x] = imhist(I,32);%先计算32个小区间的灰度直方图counts = counts /M / N;%计算归一化灰度直方图各区间的值stem(x,counts);%绘制归一化直方图
1.3 应用
图像的灰度直方图有很多信息,如亮度和对比度等
亮度:灰度级集中位置,从左到右,图像逐渐变亮 。
对比度:灰度级分布的区间越大,对比度越高 。
2 灰度的线性变换
利用一个一维线性函数实现对比度、亮度的变化:
S = f(t) = At + B 。
其中,A对应对比度,A>1时,对比度增大;A B对应亮度,在A=1的条件下,B越大灰度值越大;A
实现

【三】图像的点运算

文章插图
I = imread('coins.png');% 读入原图像I = im2double(I);% 转换数据类型为double[M,N] = size(I);% 计算图像面积figure(1);% 打开新窗口imshow(I);% 显示原图像title('原图像');figure(2);% 打开新窗口[H,x] = imhist(I, 64);% 计算64个小区间的灰度直方图stem(x, (H/M/N), '.');% 显示原图像的直方图title('原图像');% 增加对比度Fa = 2; Fb = -55;O = Fa .* I + Fb/255;figure(3);subplot(2,2,1);imshow(O);title('Fa = 2 Fb = -55 增加对比度');figure(4);subplot(2,2,1);[H,x] = imhist(O, 64);stem(x, (H/M/N), '.');title('Fa = 2 Fb = -55 增加对比度');% 减小对比度Fa = 0.5; Fb = -55;O = Fa .* I + Fb/255;figure(3);subplot(2,2,2);imshow(O);title('Fa = 0.5 Fb = -55 减小对比度');figure(4);subplot(2,2,2);[H,x] = imhist(O, 64);stem(x, (H/M/N), '.');title('Fa = 0.5 Fb = -55 减小对比度');% 线性增加亮度Fa = 1; Fb = 55;O = Fa .* I + Fb/255;figure(3);subplot(2,2,3);imshow(O);title('Fa = 1 Fb = 55 线性平移增加亮度');figure(4);subplot(2,2,3);[H,x] = imhist(O, 64);stem(x, (H/M/N), '.');title('Fa = 1 Fb = 55 线性平移增加亮度');% 反相显示Fa = -1; Fb = 255;O = Fa .* I + Fb/255;figure(3);subplot(2,2,4);imshow(O);title('Fa = -1 Fb = 255 反相显示');figure(4);subplot(2,2,4);[H,x] = imhist(O, 64);stem(x, (H/M/N), '.');title('Fa = -1 Fb = 255 反相显示');
3 灰度对数变换
这是一种灰度的非线性变换,可以增强较暗的区域:
t = c log(1+s)
实现
I = imread('coins.png');F = fft2(im2double(I));%快速傅里叶变换计算频谱F = fftshift(F);%将零频分量移到频谱中心F = abs(F);%取正值T = log(F + 1);%对数变换subplot(1,2,1);imshow(F,[]);title('对数变换前');subplot(1,2,2);imshow(T,[]);title('对数变换后');
4 伽玛变换
这是另一种常用的灰度非线性变换,用于增强对比度:
y = (x + esp)*r
式中,x与y的取值范围均为[0,1];esp为补偿系数;r为伽玛系数 。
r>1时,图像的高灰度区域对比度增强 。
实现
I = imread('pout.tif');subplot(1,3,1);imshow(imadjust(I, [ ], [ ], 0.75));% Gamma取0.75title('Gamma 0.75');subplot(1,3,2);imshow(imadjust(I, [ ], [ ], 1));% Gamma取1title('Gamma 1');subplot(1,3,3);imshow(imadjust(I, [ ], [ ], 1.5));% Gamma取1.5title('Gamma 1.5');figure;subplot(1,3,1);imhist(imadjust(I, [ ], [ ], 0.75));% Gamma取0.75title('Gamma 0.75');subplot(1,3,2);imhist(imadjust(I, [ ], [ ], 1));% Gamma取1title('Gamma 1');subplot(1,3,3);imhist(imadjust(I, [ ], [ ], 1.5));% Gamma取1.5title('Gamma 1.5');