Advertisement

c实现 图像dither算法_【图像处理三】图像增强算法

阅读量:

本文介绍了多种图像增强技术及其应用:首先讨论了传统的直方图均衡化方法,通过调整灰度级分布提升图像对比度;接着探讨了Gamma变换在亮度调节中的作用;然后介绍Laplace算子用于边缘检测与细节增强;此外还描述了一种基于深度学习的LL-NET方法,在低光照条件下通过自动编码器学习特征以提高图像质量;最后总结了这些方法在实际中的效果与应用场景(如对比度提升、细节增强等)。

引言

由于受环境及光照等因素的影响,在拍摄的照片中清晰度与对比度均偏低,在图中无法突出图片的重点部分。图像增强则是通过特定方法来提升图片的对比度,在此过程中使人物或物体特征更加突出,并有助于后续识别处理等操作。本章将介绍几种传统意义上的图像增强算法,并附上对应的Matlab实现代码以供参考;随后会对不同算法的表现效果进行具体分析;最后则会探讨当前深度学习技术在图像增强领域的发展现状及其应用前景

01

直方图均衡

在直方图中,在某些情况下(即当亮度值集中在较高亮度区域时),较低亮度区域的细节难以辨识;相反地,在某些情况下(即当亮度值集中在较低亮度区域时),较高亮度区域的细节则难以辨识)。为了使不同亮度区域能够被清晰地区分开来,在这种情况下最好的方法是将图像进行调整(即对图像进行处理),从而使得不同亮度区间的出现概率相等。这正是直方图均衡的主要目的所在。假设经过如下变换:

c318fec368514743bc714014b14af0f5.png

其中L为灰度级。我们的目的是使得灰度级概率分布相等:

aa000b89597d26ffd99ab21f1e939628.png

变换前灰度级分布和变换后灰度级分布关系为:

806b8c0c527e33e7bbb35f6908994434.png

因此有:

57afe4a26b83c654b782c17b10ecd8a3.png

积分有:

60fb3b86e233ad00207a10bfe551b9ca.png

用离散化表示:

6f2d02b1e41eb3e0f4f1d3efc1d06f9e.png

Matlab代码如下:

function histogramEqual(histogramEqual img) = imread('../data/img0.jpg'); gray = rgb2gray(img); figure; imshow(gray); imwrite(gray, ['../data/gray0.jpg']); % Calculate histogram histgramData = linspace(0, 0, 256); [grayRow, grayColumn] = size(gray); grayPixelNumber = grayRow * grayColumn; for i = 1:grayRow for j = 1:grayColumn histgramData(gray(i,j) + 1) = histgramData(gray(i,j) + 1) + 1; end end % Perform histogram equalization histogramIntegral = zeros(257); for i = 1:256 for j = 1:i histogramIntegral(i) += histgramData(j); end end for i = 1:grayRow for j = 1:grayColumn gray(i,j) = round(255 * histogramIntegral(gray(i,j) + 1) / grayPixelNumber); end end figure; imshow(gray); imwrite([灰度图像], ['../output/histogramEqual.jpg']); return;

处理结果:

de362ca13efce19a95a46b6ff83075cd.png
ef1e456b0e83cd430df268473d3fa7cf.png

图1.1 直方图均衡化结果(左)原图像(右)结果

02

Gamma变换

该Gamma变换主要应用于图像校正工作,在处理亮度异常的情况下可有效改善图像质量。其通过逐像素应用乘积运算的方式实现对比度提升:g(i,j) = c \cdot s(i,j)^{\gamma}其中c为常数项,s(i,j)代表原始像素值,γ为伽马参数.

4cee80c5273215a310c050cb2453f857.png

从下图的gamma曲线中可以看出其变换原理:

044179811b2997ddd5ff886e8e8d25f0.png

图2.1 图像gamma变换

观察图像发现:当变量r的取值高于1时,在增强高亮度区域的同时也会减弱低亮度区域的表现力;反之,则会加强低亮度细节并抑制高亮区域的影响。这种调节机制能够实现对比效果的优化。

Matlab代码:

函数imageGamma(r),读取图片imgData并通过rgb2gray转换为灰度图。
获取灰度图的行数和列数,并将其转换为双精度数据。
循环i从1到灰度图的行数:
循环j从1到灰度图的列数:
计算新的灰度值:(灰度图中第i行第j列像素值/255)的r次方乘以255
对结果进行四舍五入处理
将所有修改后的像素值赋回灰度图中。
将修改后的灰度图像转换为uint8类型并保存为名为gamma_r的结果图像。
显示处理后的图像并完成保存操作。

结果如下:

e58855fcb3a4d007e37511aa7821f643.png
e6734dca6b87f7911e3140c9f12a7d98.png

图2.2 gamma变换(左)r=0.5(右)r=1.5

03

Laplace变换

对图像进行二阶导数运算能够有效增强边缘特征并锐化细节信息。通常期望设计一个具有方向不敏感特性的同性滤波器,在此过程中Laplace算子被广泛采用作为最简单的实现方案。其数学表达式如下所示:

eb81b63267478f6efec820a18448d296.png

表示为离散形式为:

76aba798f7f6b5662689dc69c194a0d8.png

实现上式的模板为:

e9cc5cab7e9f24c3d98130c194cba958.png

将laplace变换的结果按照一定比例加入到原灰度图像中:

bce274910b23f89681624677aac2e771.png

既可以来突出对比度。

Matlab代码为:

以下是基于给定规则对原始文本的改写

结果为:

5836b9de822202e32b27eca56683a71d.png
85ff4f8ed6d2212c5a7108af1c10339a.png
dde8b3f3fa37a7b7275ede7efcbf4454.png

图3.1 laplace算子增强(上左)laplace变换结果(上右)C=0.5(下)C=0.8

04

Retix算法

Retix是一种基于光学物理特性的方法,在入射光L(x, y)照射到物体时,在表面发生反射R(x, y),经由人眼接收系统接收后的光线被视觉系统接收为:

33bfa56236990a690a00b553ce82de52.png

在大多数情况下,R(x,y)作为物体的内生属性存在,包含了丰富的信息内容,我们应当尽可能地保留这些信息。Retix理论的主要提出者认为,L(x,y)可通过高斯模糊模型获得。为了简化计算过程,对上式取对数处理后,可得如下结果:

9fd64f4185f620f9f27b25b77364b289.png

L\left( x,y \right)\text{被高斯函数}G\left( x,y \right)\text{与观察图像}S\left( x,y \right)\text{进行convolution操作所生成}。\text{其中}G\left( x,y \right)\text{为}

459118689f338091c2e01b564b01429c.png

为了降低卷积运算的的运算量,我们取了7x7的高斯卷积模板。

Matlab代码为:

function singleRetix(c)imgData=imread('../data/img0.jpg');gray=rgb2gray(imgData);[grayRow, grayColumn]=size(gray);gray=double(gray);gaussConv=zeros(grayRow, grayColumn);for i=1:grayRowfor j=1:grayColumnfor k=-3:3for n=-3:3gaussValue=two_d_gauss(k, n, c);if (i+k>=1) && (i+k<=grayRow) && (j+n>=1) && (j+n<=grayColumn)grayValue=gray(i+k, j+n);elsegrayValue=0;endgaussConv(i, j)=gaussConv(i, j)+grayValuegaussValue;endendendendgray=log(gray);gaussConv=log(gaussConv);reflectGray=exp(gray-gaussConv);maxReflectGray=max(max(reflectGray));minReflectGray=min(min(reflectGray));reflectGray=((reflectGray-minReflectGray) . 255) ./ (maxReflectGray-minReflectGray);reflectGray=uint8(reflectGray);fileName='../output/retix';fileSuf='.jpg';gammaStr=num2str(c);file=[fileName, gammaStr, fileSuf];figure('name', 'processed');imshow(reflectGray);imwrite(reflectGray, file);endfunction res=two_d_gauss(x, y, c)res=(1/sqrt(2pic))*(-(x2+y2)/c^2);end

结果:

6a40b11344379aeccc5f00d7da2dfe85.png
6a40b11344379aeccc5f00d7da2dfe85.png

图4.1 Retix结果(左)sigma=90(右)sigma=150

05

基于深度学习的图像增强

LL-NET是首个通过深度学习实现图像增强的技术方案。在论文中采用了自动编码器从表示学习的角度专门针对低光图像增强问题进行处理。这些自动编码器经过训练后能够提取并适应性地增强低光图像的基础信号特征,并有效去除噪声。LL-NET借鉴了SSDA网络的关键特性这一关键特征,并利用其稀疏特性优势实现了有效的去噪效果。同时该方法还充分考虑了网络具有良好的泛化能力生成适合低照度条件下的测试图片,并指导网络提取并优化图像特征以降低噪声并提升对比度水平。

网络结构如下:

384ce39692cfda97b985ca314b0e8c5a.png

图5.1 LL-NET网络结构

结果为:

46cf89f462cabf569a182b8df37a88d4.png

图5.2 结果

结论

本文介绍了四种传统的图像增强算法,以及一种基于深度学习的方法。

a286da9555e307f7c4290a8d27dd9ac6.png
25ae1db6cc5d4b9982918a679a1547f6.png
98e33847623a57ab511ac6f94f81eba5.png
1247c481cc43da530c027ef42872a943.png
dd0b1118143e640ec4cd9f3054da6cf5.png

公众号

AI加速

5200b5175bf099474a6d11d43ee0194a.png

用FPGA做有趣的事

4a9c548ee17f900e4dffe76db0a69fe9.png
1b23e238d794bcbbd05960b304ba0736.png

全部评论 (0)

还没有任何评论哟~