直接灰度变换法matlab,数字图像处理-灰度变换(附MATLAB 代码)
⽬录
图像增强
1.灰度变换
(1)线性变换
(2)分段线性变换
(3)⾮线性灰度变换
2.直⽅图修正法
(1)直⽅图均衡化
(2)直⽅图规定化
视频处理
图像增强
图像增强的⽬的:(1)利⽤⼀系列技术改善图像的视觉效果,提⾼图像清晰度。(2)将图像转换为⼀种更适合⼈或机器进⾏分析处理的形式,抑制⽆⽤信息,提⾼图像使⽤价值。
图像增强从作⽤域划分为:空间域增强、频率域增强、彩⾊增强。
其中,空间域增强是直接对图像像素灰度进⾏操作。包括:点运算和局部运算。
频率域是经过傅⾥叶变换后对图像频谱进⾏操作,最后进⾏逆变换得到结果。
点运算包括:灰度变换、直⽅图修正法和局部统计法。
倒档器1.灰度变换
灰度变换使得图像的动态范围增⼤,增强对⽐度,让图像变得更清晰,特征更明显。
其中包括:线性变换、分段线性变换、⾮线性灰度变换。
(1)线性变换
图像的灰度集中在较亮的区域⽽导致图像偏亮,这个时候可以对图像的每⼀个像素灰度作线性拉伸。
原图像f(i,j)的灰度范围为[a,b],线性变换后图像g(i,j)的范围为[a1,b1]
床身
关系式为:
A = imread('412.jpg');
A1 = rgb2gray(A);%彩⾊图像转为灰度图像
a1 = 0;
b1 = 255;%线性变换后的范围
%imhist(A1)%查看灰度直⽅图
subplot(121),imshow(A1);
a = 50;
b = 250;%原图像范围
激光内雕
A2 = a1+(b1-a1)/(b-a)*(A1-a);
subplot(122),imshow(A2);
(2)分段线性变换
为了突出感兴趣的⽬标,抑制不感兴趣的⽬标,可以采⽤分段线性变换。公式:
A = imread('412.jpg');
A1 = im2double(rgb2gray(A));%彩⾊图像转为灰度图像
[h,w] = size(A1);
A2 = zeros(h,w);
a = 0.2;
b = 0.8;
c = 0.1;
d = 0.9;
for i = 1:h
for j = 1:w
if A1(i,j)<=a
A2(i,j) = (c/a) * A1(i,j);
elseif A1(i,j)
(3)⾮线性灰度变换
安瓿印字机
某些⾮线性函数:对数函数、指数函数等作为映射函数的时候,可实现⾮线性变换。 1.对数变换
对低灰度区进⾏拉伸,对⾼灰度区进⾏压缩。
A = imread('412.jpg');
A1 = im2double(rgb2gray(A));%彩⾊图像转为灰度图像
subplot(221),imhist(A1)%查看灰度直⽅图
subplot(222),imshow(A1);
A2 = log(A1+1);
subplot(223),imhist(A2)
subplot(224),imshow(A2);
2.指数变换
对⾼灰度区拉伸。
A = imread('412.jpg');
A = rgb2gray(A);
A1 = double(A);
csmateA2 = 1.5.^(A1*0.070)-1;
A1 = uint8(A1);
A2 = uint8(A2);
subplot(221),imhist(A1)%查看灰度直⽅图subplot(222),imshow(A1);
subplot(223),imhist(A2)
subplot(224),imshow(A2);
这⾥我发现了MATLAB⾥⾯ im2double 和 double原来是有区别的?于是去查了下……
(被这个坑了⼀个⼩时的我泪流满⾯)
im2double()是转换为double类型以后并且归⼀化为[0,1]中,⽽double没有做此处理。
2.直⽅图修正法
⼀般的图像灰度分布集中在较窄的区间,导致图像细节不清晰,使⽤直⽅图修正法可以让图像的灰度间距拉开或者让灰度分布均匀⽽增⼤反差,使得图像细节清晰。
直⽅图修正法包括:直⽅图均衡化和直⽅图规定化。
(1)直⽅图均衡化
直⽅图均衡化是将原图像的直⽅图通过变换函数修正为均匀的直⽅图,然后按均衡直⽅图修改原图像。
变换函数:(离散)
ps.咦怎么打不出求和函数……
MATLAB⾥刚好有histeq()函数可以⽤于均衡化。
其中:histeq()有两个参数,第⼀个参数为要处理的图像,第⼆个参数为处理后的灰度级个数。
A = imread('412.jpg');
A1 = rgb2gray(A);
A2 = histeq(A1,64);
subplot(221),imhist(A1)%查看灰度直⽅图
subplot(222),imshow(A1);
subplot(223),imhist(A2)