博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一些基本的灰度变换函数
阅读量:5751 次
发布时间:2019-06-18

本文共 3650 字,大约阅读时间需要 12 分钟。

1. 图像反转

灰度级范围[0, L - 1]的一幅图像的反转图像可以由下式给出:

s = L -1 -r .

图像反转可以用于处理特别适用于增强嵌入在一幅图像的暗区域中的白色或灰色细节,特别是当黑色面积在尺寸上占主导地位时。

 

如:数字乳房x射线照片

代码:

Image_original = imread('D:\图像处理\image\DIP3E_Original_Images_CH03\Fig0304(a)(breast_digital_Xray).tif');

I = 255 - Image_original;
subplot(121)
imshow(Image_original)
subplot(122)
imshow(I)

显示:

图像增强变换,需先做归一化处理,再做对数或指数变换,最后再反归一化。

2. 对数变换

通用形式:

s = c log(1 + r). / s = c logv+1(1+r * v)

其中c为常数,且假设r ≥ 0.

对数变换可以用来扩展图像中的暗像素的值,同时压缩更高灰度级的值。

对公式讲,v越大,则灰度部分增强越强。

如:值域为0~1.5*106的傅里叶频谱

代码:

f = imread('D:\图像处理\image\DIP3E_Original_Images_CH03\Fig0305(a)(DFT_no_log).tif');

f_g = mat2gray(f);
f_log = log(1 + 10 * f_g)/log(1 + 10);
max =255;
min =0;
f_log_fg = uint8(f_log*(max - min) + min);
subplot(121)
imshow(f)
subplot(122)
imshow(f_log_fg)

显示:

3.幂律变换

幂律变换基本形式: s = c rγ

其中c 和 γ 为正常数。幂律方程中的指数称为伽马(γ),用于校正这些幂律响应现象的处理称为伽马校正。 有时考虑到偏移量(即输入为0时的一个可度量输出),公式也可写为s = c(r + ε)γ

如:阴极射线管(CRT)的灰度-电压响应

代码:

f = imread('D:\图像处理\image\DIP3E_Original_Images_CH03\Fig0307(a)(intensity_ramp).tif');

f_g = mat2gray(f);
f_gama = f_g.^0.4;
max =255;
min =0;
f_gama_fg = uint8(f_gama*(max - min) + min);
subplot(121)
imshow(f)
subplot(122)
imshow(f_gama_fg)

显示:

可以使用幂律变换进行对比度增强。

如:对核磁共振(MRI)图像分别取不同的γ值,扩展灰度级。

代码:

f = imread('D:\图像处理\image\DIP3E_Original_Images_CH03\Fig0308(a)(fractured_spine).tif');

gama06 = imageEnhance(f,0.6);
gama04 = imageEnhance(f,0.4);
gama03 = imageEnhance(f,0.3);
subplot(221)
imshow(f)
subplot(222)
imshow(gama06)
subplot(223)
imshow(gama04)
subplot(224)
imshow(gama03)

%%%子函数

function gama_transform = imageEnhance(image,gama)
f_g = mat2gray(image);
f_gama = f_g.^gama;
max =255;
min =0;
gama_transform = uint8(f_gama*(max - min) + min);

显示:

利用幂律变换进行灰度级压缩。

如:航拍图像,取不同的γ值进行灰度级压缩

代码:

f = imread('D:\图像处理\image\DIP3E_Original_Images_CH03\Fig0309(a)(washed_out_aerial_image).tif');

gama3 = imageEnhance(f,3);
gama4 = imageEnhance(f,4);
gama5 = imageEnhance(f,5);
subplot(221)
imshow(f)
subplot(222)
imshow(gama3)
subplot(223)
imshow(gama4)
subplot(224)
imshow(gama5)

%%子函数定义

function gama_transform = imageEnhance(image,gama)
f_g = mat2gray(image);
f_gama = f_g.^gama;
max =255;
min =0;
gama_transform = uint8(f_gama*(max - min) + min);

显示:

4.分段线性变换函数

 (1).对比度拉伸

由于照明不足、成像传感器动态范围小或者在图像获取过程中镜头光圈设置错误引起的低对比度,可以进行对比度拉伸来扩展图像灰度级动态范围。

例如:实现将图片最低灰度级min到最高灰度级max拉伸到0:255.

代码:

f = imread('D:\图像处理\image\DIP3E_Original_Images_CH03\Fig0310(b)(washed_out_pollen_image).tif');

[m,n,k] = size(f);
mid = mean(mean(f));
min = min(min(f));
max = max(max(f));
r1 = 91;
r2 = 138;
r3 = 120;
r4 = 120;
s1 = 0;
s2 = 255;
g = LinearEnhance(f,r1,r2,s1,s2);
g1 = LinearEnhance(f,r3,r4,s1,s2);

k1 = double(s1 / r1);

k2 = (s2 - s1) / (r2 - r1);
k3 = (255 - s2) / (255 - r2);

pixel_f=1:256;

pixel_g=zeros(1,256);

for i = 1:255

if i <= r1
pixel_g(i) = k1 * i;
else if i <= r2 && i > r1
pixel_g(i) = k2 * (i - r1) + s1;
else
pixel_g(i) = k3 * (i - r2) + s2;
end
end
end
subplot(221)
imshow(f)
subplot(222)
imshow(g)
subplot(223)
imshow(g1)
subplot(224)
plot(pixel_f,pixel_g)
text(91,0,'(r1,s1)');
text(138,255,'(r2,s2)')

 

子函数定义:

function stretch_image = LinearEnhance(image,r1,r2,s1,s2)

[height,width] = size(image);
stretch_image = uint8(zeros(height,width));
image = double(image);

%%%%%求斜率

k1 = s1 / r1;
k2 = (s2 - s1) / (r2 - r1);
k3 = (255 - s2) / (255 - r2);

for i = 1:height

for j = 1 : width
if image(i, j) <= r1
stretch_image(i ,j) = k1 * image(i, j);
else if image(i, j) <= r2 && image(i, j) > r1
stretch_image(i, j) = k2 * (image(i, j) - r1) + s1;
else
stretch_image(i, j) = k3 * (image(i, j) - r2) + s2;
end
end
end
end
stretch_image = uint8(stretch_image);

显示:

 

参考资源:

友好连接:

数字图像处理(第三版)冈萨雷斯

转载于:https://www.cnblogs.com/MrZheng9511/p/Enhance.html

你可能感兴趣的文章
栈(一)
查看>>
ios 自定义delegate(一)
查看>>
创建美国地区的appleId
查看>>
例题10-2 UVa12169 Disgruntled Judge(拓展欧几里德)
查看>>
JS 原生ajax写法
查看>>
Composer管理PHP依赖关系
查看>>
React.js学习笔记之JSX解读
查看>>
我所了解的Libevent和SEDA架构
查看>>
Socket编程问题小记
查看>>
基于Flask-Angular的项目组网架构与部署
查看>>
一张图道尽程序员的出路
查看>>
redis 常用命令
查看>>
LVS+Keepalived高可用负载均衡集群架构
查看>>
烂泥:kvm安装windows系统蓝屏
查看>>
iPhone开发面试题--葵花宝典
查看>>
EdbMails Convert EDB to PST
查看>>
POJ 2184
查看>>
大话 程序猿 眼里的 接口
查看>>
struts2用了哪几种模式
查看>>
replace函数结合正则表达式实现转化成驼峰与转化成连接字符串的方法
查看>>