非线性动态范围调整matlab,基于MATLAB的几种图像增强算法

第 5 期 机电技术 37 基于 MATLAB 的几种图像增强算法 吴传富 朱同波 (闽南理工学院,福建 泉州 362700) 摘 要:简要介绍图像增强的概念和一些图像增强的算法,从图像的直方图均衡化、对比度线性展宽、动态范围非线性调整和伪彩色增强等几个方面对图像增强算法进行讨论和研究,并通过 MATLAB 软件平台,给出各种算法的处理效果。 关键词:图像增强算法;MATLAB;直方图均衡化;对比度线性展宽;动态范围非线性调整 中图分类号:TP391.41 文献标识码:A 文章编号:1672-4801(2012)05-037-03 图像增强是指按特定的需要突出一幅图像的某些信息,同时削弱或去除某些不需要的信息的处理方法。其目的是使处理后的图像对于某种特定的应用比原始图像更适用。图像增强不考虑图像质量下降的原因,只将图像中感兴趣的特征有选择的突出,而衰减不需要的特征,它的目的主要是提高图像的可读度。本文以 MATLAB 软件为平台,通过直方图均衡化、对比度线性展宽、动态范围非线性调整和伪彩色增强等算法增强数字图像的质量。 1 直方图均衡化 在对图像进行处理之前,了解图像整体或局部的灰度分布情况非常必要。对图像的灰度分布进行分析的重要手段就是建立图像的灰度直方图,利用图像灰度直方图,可以直观地看出图像中的像素亮度分布情况;通过直方图均衡化处理,可以对图像的质量进行调整。 直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值进行展宽,而对像素个数少的灰度值进行归并,从而达到清晰图像的目的。如果图像的灰度分别集中在较窄的区间,从而引起图像细节的模糊,为了增强图像,可通过改善各部分亮度的比例关系,即通过直方图均衡化的方法来实现。根据原图像的直方图统计值就可算出均衡化后各像元的灰度值。直方图上灰度分布较密的部分被拉伸;灰度分布较稀疏的部分被压缩,使图像对比度总体上得到增强。 在 MATLAB 中,histeq 函数可以实现直方图均衡化。其调用格式为: J = histeq(I,n); 该命令对灰度图像 I 进行变换,返回灰度图 像 J。其中,n 是均衡化后的灰度级数目,是一个可选参数,缺省值是 64。图 1 为图片经直方图均衡化处理后的结果。 原图 原图直方图 (a) 原图及直方图 均衡化后的图 均衡化后的直方图 (b) 均衡化后的图及直方图 图 1 图片经直方图均衡化处理后的结果 从图 1 中可以看出,原始图的灰度范围大约是 80~170 之间,灰度分布的范围比较狭窄,所以整体上看对比度比较差,而直方图均衡化后,灰度几乎是均匀的分布在 0~255 的范围内,图像明暗分明,对比度很大,图像比较清晰明亮,很好的改善了原始图的视觉效果。 2 对比度线性展宽 为了突出感兴趣的目标或者灰度区间,相对抑制那些不感兴趣的灰度区域,可采用对比度线性展宽。 设原图像的灰度为 ( , )f ij,处理后图像的灰度为 ( , )g ij。对比度线性展宽的原理示意图如图 2 所示。原图中重要景物的灰度分布在[,] abf f 的范 作者简介:吴传富(1987-),男,研究方向:电子信息。 朱同波(1986-),男,研究方向:机械设计制造。 机电技术 2012 年 10 月 38 围内,则对比度线性展宽的目的是使处理后重要景物的灰度分布在[,] abg g 的范围内。当 ( ) ( ) b a b af f f g g gΔ = − < Δ = − ,则可达到对比度展宽的目的。 图 2 对比度线性展宽的原理示意图 对比度线性展宽的计算公式表示如下: ( , ) 0 ( , )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(led->state == LED_BLINK_FAST) { led->state = LED_BLINK_SLOW; } else if(led->state == LED_BLINK_SLOW) { led->state = LED_BLINK; } } } count = 以下是一个基于线性变换和非线性变换的低亮度图像增强算法的示例代码0; } else { count++; } } int main(void) { // 初始化LED引脚 RCC_APB2Periph,其中包括了灰度拉伸和CLAHE算法: ```matlab % 读取图像并转为灰ClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitTypeDef gpio; gpio.GPIO_Pin = LED_PIN_0 | LED度图像 img = imread('example.jpg'); gray_img = rgb2gray(img); % 灰度拉伸 min_val = min_PIN_1 | LED_PIN_2 | LED_PIN_3 | LED_PIN_4 | LED_PIN_5 | LED_PIN_6 |(gray_img(:)); max_val = max(gray_img(:)); stretched_img = (gray_img - min_val) * (255 / (max LED_PIN_7; gpio.GPIO_Mode = GPIO_Mode_Out_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init_val - min_val)); % CLAHE算法 clipped_img = clip(gray_img, 0, 255); % 将图(LED_PORT, &gpio); GPIO_ResetBits(LED_PORT, LED_PIN_0 | LED_PIN_1 | LED_PIN_2 | LED_PIN_3 | LED_PIN_4 | LED_PIN_5 | LED_PIN_6 | LED_PIN_7); // 初始化UART引像灰度值裁剪至0-255范围内 num_tiles = [8 8]; % 图像分块数 脚 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); gpio.GPIO_Pin = UART_TX; gpioclip_limit = 0.01; % 每个小块的直方图裁剪限制 enhanced_img = adapthist.GPIO_Mode = GPIO_Mode_AF_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(UART_PORT, &gpio); eq(clipped_img, 'NumTiles', num_tiles, 'ClipLimit', clip_limit); % 显示原始图像和增强后 gpio.GPIO_Pin = UART_RX; gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(UART_PORT, &gpio); 的图像 figure; subplot(2,2,1); imshow(gray_img); title('原始图像'); subplot(2, // 初始化UART RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); USART_InitTypeDef usart; 2,2); imhist(gray_img); title('原始图像直方图'); subplot(2,2,3); imshow(st usart.USART_BaudRate = 115200; usart.USART_WordLength = USART_WordLength_8b; retched_img); title('灰度拉伸后的图像'); subplot(2,2,4); imhist(stretched_img); title usart.USART_StopBits = USART_StopBits_1; usart.USART_Parity = USART_Parity_No; usart('灰度拉伸后的直方图'); figure; subplot(2,2,1); imshow(gray_img); title('原始.USART_HardwareFlowControl = USART_HardwareFlowControl_None; usart.USART_Mode = USART_Mode_Rx | USART_Mode_T图像'); subplot(2,2,2); imhist(gray_img); title('原始图像直方图'); subplot(2x; USART_Init(USART1, &usart); USART_Cmd(USART1, ENABLE); USART_ITConfig(USART1,2,3); imshow(enhanced_img); title('CLAHE算法增强后的图像'); subplot(2,2, USART_IT_RXNE, ENABLE); NVIC_EnableIRQ(USART1_IRQn); // 初始化定时器 RCC_APB1Periph,4); imhist(enhanced_img); title('CLAHE算法增强后的直方图'); ``` 该示例ClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseInitTypeDef tim; tim.TIM_Period = TIM_PERIOD - 1; tim.TIM_Prescaler = SystemCoreClock / 1000000 - 1; // 1us为单位 代码中,首先读取一张彩色图像并将其转换为灰度图像。然后分别使用 tim.TIM_ClockDivision = 0; tim.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM灰度拉伸和CLAHE算法进行图像增强,并显示增强后的图像和直方图。其中CLA2, &tim); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); TIM_Cmd(TIM2, ENABLE); NVIC_EnableHE算法使用了MATLAB内置函数`adapthisteq`,可通过调整`NumTiles`和`ClipIRQ(TIM2_IRQn); // 初始化SysTick SysTick_Config(SystemCoreClock / 1000); // 1ms为单位Limit`参数来控制分块数和直方图裁剪限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值