主要内容

对比有限的自适应直方图均衡化

这个例子展示了如何实现一个contrast-limited自适应直方图均衡化(CLAHE)算法使用仿真软件®块。金宝app模型的例子是FPGA-hardware兼容。

这个例子使用了adapthisteq函数的图像处理工具箱™作为参考来验证设计。

介绍

自适应直方图均衡化(AHE)是一种图像预处理技术用于提高对比度的图像。它计算几个直方图,每个对应一个不同的图像部分,并使用它们重新分配图像的亮度值。因此适合改善当地的对比和增强边缘的定义在每一个地区的形象。然而。倾向于overamplify噪声图像的相对同质的地区。自适应直方图均衡化的一种变体,称为contrast-limited自适应直方图均衡化(CLAHE)防止这种影响通过限制放大。

CLAHE算法

CLAHE算法有三个主要部分:瓷砖,直方图均衡化和双线性插值。输入图像首先被分成几部分。每个部分称为瓷砖。图中所示的输入图像分为四块。然后进行直方图均衡化每个瓷砖使用一个预定义的剪辑极限。直方图均衡化由五个步骤组成:直方图计算,计算过剩,过剩的分布,多余的再分配,和缩放和映射使用累积分布函数(CDF)。直方图计算为每个瓷砖作为一组箱。直方图本值高于夹限制积累和分布到其他箱子。它然后计算直方图的值。提供每个瓷砖的价值被测量并使用输入图像像素值映射。 The resulting tiles are stitched together using bilinear interpolation, to generate an output image with improved contrast.

HDL实现

这个图显示的HDL实现的框图CLAHE算法。它由一块瓷砖的一代,直方图均衡化管道阻塞,双线性插值块和一个输入图像缓冲块。瓷砖是通过修改生成的pixelcontrol总线的像素流所需的瓷砖的大小。像素流和修改pixelcontrol总线是直方图均衡化管道。两个直方图均衡化管道必须跟上输入数据。他们在乒乓球的方式运作。每个管道包含直方图均衡化模块等于瓷砖在水平方向上的数量。直方图均衡化模块并行工作来计算每个瓷砖直方图均衡化。直方图均衡化的最后阶段模块,扩展和映射,需要原始输入图像数据。这个数据是存储在一个输入图像缓冲块。双线性插值块生成地址读取输入图像像素值的内存。输入图像的像素值图像缓冲块的直方图均衡化模块映射。映射值从直方图均衡化缩放和双线性插值计算中使用的减少边界构件。

modelname =“CLAHEExample”;open_system (modelname“力”);set_param (modelname“SampleTimeColors”,“关闭”);set_param (modelname“开放”,“上”);set_param (modelname“SimulationCommand”,“更新”);集(allchild (0)“可见”,“关闭”);

图中显示的顶层视图CLAHEExample模型。中指定的输入图像路径inputImage块。输入图像帧转换为一个像素流和pixelcontrol总线使用帧像素块。像素流传递到CLAHEHDLAlgorithm子系统进行对比度增强,也存储在imgBuffer子系统。在处理,CLAHEHDLAlgorithm子系统生成的地址读取图像数据从imgBuffer子系统。像素值读取imgBuffer子系统传递给CLAHEHDLAlgorithm调整。调整后的像素值的像素帧块,使用控制信号转换为一个框架。结果子系统显示输入图像和输出图像所有像素的像素帧已收到的帧块。

瓷砖的一代

系统=“CLAHEExample / CLAHEHDLAlgorithm / tileGeneration”;open_system(系统,“力”);

图显示了瓷砖一代子系统。这个子系统是用来将输入图像分成许多瓷砖在水平和垂直两个方向。默认情况下,模型将输入图像划分为8个瓷砖在每个方向。砖是由修改输入pixelcontrol总线选择像素每瓦地区。垂直(水平)瓷砖的大小计算数除以输入图像的行(列)瓷砖的数量在同一方向。瓷砖子系统内部,是ROI选择器启用了垂直重用。这个选项允许并行处理垂直瓷砖和RoI的选择器生成像素流和相应的pixelcontrol公共汽车的每个水平的瓷砖。直方图均衡化的像素流管道由转移控制每个垂直平铺一个备用管。瓷砖的大小计算必须是偶数。如果输入图像不分为整数even-sized瓷砖,垫的输入图像对称。

直方图均衡化的管道

系统=“CLAHEExample / CLAHEHDLAlgorithm / histoEqPipeline /”;子系统=[系统“histPipe1”];open_system(子系统,“力”);

两个直方图均衡化管道用于跟上流输入像素。每个直方图均衡化管道包括直方图均衡化模块对应于每个瓷砖在水平方向上。这些模块实现通过使用一个为每个子系统。每个直方图均衡化模块分为五个阶段:直方图计算,多余的计算,总总分布过剩,过剩的再分配,累积分布函数和映射。

第一个模块直方图的管道,histoExcess子系统、执行直方图计算为每个瓷砖和总多余的计算。计算直方图,柱状图块使用。当直方图完成生成一个readRdy信号。子系统然后读取直方图的值并确定超额价值从每本通过剪辑极限值。规范化夹的夹限制计算极限值指定使用这些方程。

$ $ minClipLimit =装天花板(numPixInTile / numBins); $ $

$ $ clipLimit = minClipLimit +圆(normClipLimit * (numPixInTile-minClipLimit)); $ $

每个本积累形成的超额价值的总超额价值。前面计算直方图的值没有改变在总多余的计算和存储在一个简单的双端口RAM内存块。所需的控制信号生成的内存块(ramBus) histoExcess子系统。的总超额价值计算histoExcess子系统分配子系统使用。

分发子系统计算两个变量:平均本增量和上限。这些值计算的总超额价值利用这些方程:

$ $ avgBinIncr = totalExcess / numBins; $ $

$ $ upperLimit = clipLimit - avgBinIncr; $ $

然后分发子系统从内存中读取每个直方图的值本块。它更新值在每一本基于这三个条件:

  1. 如果本的直方图值大于夹限制,取而代之的是剪辑的极限。

  2. 如果直方图值之间的本是剪辑极限上限,直方图值取代夹限制。总超额价值减少的数量增加了像素等于(clipLimit - histVal)

  3. 如果直方图的价值本是低于上限,直方图值增加了平均本增量。总超额价值减少的平均本增量。

调整直方图的值存储在同一地址。剩余的总超额价值传递给超额价值的重新分配子系统。

系统=“CLAHEExample / CLAHEHDLAlgorithm / histoEqPipeline /”;子系统=[系统“histPipe1 /重新分配”];open_system(子系统,“力”);

重新分配子系统分配溢出过剩值直方图箱。它主要使用两个变量分配多余的价值观:binIncr一步binIncr指定要添加到的值直方图箱里。一步指定地址计数器的增量用于获取直方图本价值。如果多余的数量大于或等于垃圾箱,然后binIncr计算超额价值除以垃圾箱的数量,然后呢一步设置为1。实现除以使用右移位操作,由于箱子的数量是2的幂。

如果多余的小于垃圾箱的数量,binIncr设置为1,一步计算箱子的数量除以超额价值。计算除以使用一天的查找表(金宝app模型)块。的redistributeCtrlMATLAB函数生成的地址使用的内存块一步值计算。当地址到达箱子的总数,一步值重新计算使用最近的超额价值。是注意不要重复第一本作为再分配的开始本。如果直方图的值本小于夹限制,增加了binIncr,相同的值中减去多余的价值。如果直方图的价值本等于夹限制,不执行操作和价值是写回到相同的地址。MATLAB功能块重复这些本调整,直到超额价值达到0。

直方图均衡化的最后阶段管道提供计算。提供子系统计算累积直方图本值之和。直方图的值是读取内存块并将其添加到前面的直方图本值的总和。然后存储到同一个地址。

直方图均衡化的五个阶段模块可以被认为是五个州。直方图均衡化模块顺序的五个州。因此,一个国家计数器是用来从一个状态转移到另一个状态。一个计数器值决定了直方图均衡化模块的状态。一个多端口切换(金宝app模型)块使用计数器作为索引值。多口开关连接ramBus从每个国家根据该指数与正确的记忆。国家对抗状态1处于闲置状态。当histoExcess完成多余的计算设置完成为一个周期信号1,国家应对移动到状态2。同样,分发子系统、重新分配子系统和cdf子系统生成做标志,当处理完成。这些旗帜增加状态与状态5,它利用输入图像像素值从输入图像缓冲块RAM地址阅读提供值。之前被用作地址,输入图像像素值比例根据直方图箱的数量。当直方图箱的数量小于的数量输入图像强度水平,后者的值映射到相同的范围提供值。读取输入图像的地址计数器的值是由双线性插值子系统。双线性插值的状态计数器递增子系统映射为相应的管道完成时。

双线性插值

使用双线性插值平滑边缘时瓷砖缝在一起。图显示了四块是用来计算输出图像的像素值。每个瓷砖分为四个部分。从每一个部分的四个瓦片被组合在一起来计算双线性插值图像的部分。

插值使用这个方程:

$ $ grayxform一轮(imgPixVals mapTile) = ((2 ^ {inputBitWidth} 1) * mapTile (imgPixVals) / & # xA; numPixInTile); $ $

双线性插值方程用一个像素的位置对每个瓷砖和强度信息在这个位置来计算输出图像的像素值。强度从输入图像的像素值获得的信息存储在图像缓冲区中。瓷砖的角落,强度值复制(镜像)。强度信息在各自的位置在每个瓷砖提取直方图均衡化管道的运作功能通过使用输入图像的像素值在同一位置。的grayxform函数尺度从它获得的值函数。结果然后除以瓷砖的像素数量,表示为normFactor在方程。

系统=“CLAHEExample / CLAHEHDLAlgorithm / bilinearInterpolation”;open_system(系统,“力”);

双线性插值的图显示了HDL实现子系统。当直方图均衡化管道达到5,paramCalc子系统开始计算的读地址imgBuffer子系统。像素值从缓冲图像读取内存的地址在直方图均衡化的管道。CDF实验组的值从阅读中获取地址的所有瓷砖的直方图均衡化同时管道。所需的CDF实验组的价值选择和传递到方程子系统使用选择器开关模块和开关模块。管道的开关组选择包含上/下瓷砖和选择开关选择数据块对应的左/右瓷砖。选择开关的控制信号和开关块生成在paramCalc子系统通过读取计数器。因此,在一个像素强度值位置为每个瓷砖从图像缓冲区。双线性插值方程还需要像素位置和像素的总数在瓷砖。这些参数也paramCalc子系统中生成。 The equation subsystem is pipelined to optimize performance in hardware. The result is returned as a pixel stream with apixelcontrol公共汽车。

双线性插值计算输出图像的遍历行从左到右。当所有直方图均衡化模块在第一管道已达到国家5 paramCalc子系统启用。imgBuffer子系统的读地址计算,直到点a的进一步计算双线性插值要求值的直方图均衡化模块第二管道。当所有直方图均衡化模块第二管道已达到国家5,读地址计数器再次启用和双线性插值计算输出结果之间的像素位置A点和B点一旦地址计数器达到B点,结果从第一管道不再是必需的。的pipe1Done信号生成改变首先直方图均衡化管道模块的状态回到状态1。直到这个时候,第一管道上的瓷砖瓷砖,瓷砖在第二管道低的瓷砖。点之间的计算值B和C点,瓷砖在第二管道成为第一个管道上瓷砖,瓷砖现在低的瓷砖。这个操作继续直到最低的瓷砖图像中仍然存在。这些瓷砖的输出计算通过复制其他管道的值。输出结果推向一个FIFO outputStage子系统和弹出这样的输出有效信号类似于输入像素流。

模型参数

CLAHE使用夹限制防止过渡图像均匀的地区。这些地区的特点是一个图像的直方图峰瓦由于许多像素相同强度范围内下降。本文提供的模型,剪辑的限制是一个用户定义的标准化值。默认值是0.01(如图)。夹限制可以是任何值在0和1之间(包容)。

指定的输入图像帧尺寸主动视频线和主动每行像素。输入图像帧大小设置瓦维至关重要。瓷砖的数量定义矩形上下文的图像划分区域。水平和垂直平铺尺寸指的是瓷砖的数量相关的方向。这些值必须至少2和输入图像只能分为整数even-sized瓷砖的数量。瓷砖的大小面具参数与有效的自动填充选项为每个图像尺寸。瓷砖的最优数量取决于输入图像的类型,并通过实验最好决定。

输入一些宽度定义了输入图像中每个像素的比特数。这有助于确定输入图像的最大强度值可以表示。直方图箱用于构建的数量对比增强转换可以从32到4096多样。如果图像尺寸或瓷砖尺寸太小,高本大小架构不支持和有效的选择是自动填充。金宝app更高的值直方图箱导致更大的动态范围,因此更好的分辨率更高的成本设计延迟。

仿真和结果

这个例子使用一个输入图像的大小240 - - 320像素,在inputImage块中指定的路径。指定的输入图像像素是一个输入8位的宽度相当于uint8数据类型。8块在每个方向,计算瓷砖大小30-by-40和每个瓷砖的像素数量是1200。直方图箱的数量设置为256。

这图显示了输入图像和输出图像从CLAHE模型。结果显示改进后的输出图像对比,没有过度饱和。CLAHE HDL模型匹配的结果adaphisteq在MATLAB函数,只有几个像素的一个错误。

HDL代码生成的CLAHEHDL子系统。需要产生高密度脂蛋白HDL编码™许可证代码。这个设计合成的英特尔®Arria®10 GX平台,10 ax115s2f45i1sg FPGA器件。表显示了资源利用率。HDL设计实现时钟频率为200 MHz。

% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =% |模型名称| | CLAHEHDL | |% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =输入图像分辨率% | | | 320 x 240 | |% | ALM利用率| | 48045 | |总额% |注册| | 51688 | |总内存块% | | | 63 | |% |总DSP模块| | 6 | |% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

引用

卡雷尔Zuiderveld,对比有限的自适应直方图均衡化,图像宝石IV, p . 474 - 485,代码:479 - 484页。