当前位置:   article > 正文

自适应直方图均衡化

自适应直方图均衡化

简述

自适应直方图均衡化(AHE)用来提升图像的对比度的一种计算机图像处理技术。和普通的直方图均衡算法不同,AHE算法通过计算图像的局部直方图,然后重新分布亮度来改变图像对比度。因此,该算法更适合于改进图像的局部对比度以及获得更多的图像细节

算法思想(下面看不懂,请先了解直方图均衡化

移动模板W在图像A上逐行移动,并且模板W的中心c(x0,y0)对应图像上的点f(x0,y0);计算模板W区域的直方图均衡化变化关系:g(x,y)= T(f(x,y),计算模板中心点c(x0,y0)的均衡化对应像素值:g(x0,y0) = T(f(x0,y0))。用g(x0,y0)替代f(x0,y0);逐行计算得到整幅图像的自适应直方图均衡化图像。

我的理解:就是在一个给定框内做直方图均衡化,而框内所有处理(包括均衡化)只为了这个将原始中心点像素a变化到新的像素点b。

算法实现

  1. function [ output_img ] = my_AHE( input_img, w)
  2. %UNTITLED Summary of this function goes here
  3. % Detailed explanation goes here
  4. % 自适应直方图均衡化
  5. % 输入:input_img:待处理图像
  6. % w: 局部处理的窗口大小
  7. [height,width,channels]=size(input_img);
  8. if channels==1
  9. src = inpit_img;
  10. else
  11. src = rgb2gray(input_img);
  12. end
  13. %1.图像边界扩展
  14. padsize=[(w-1)/2,(w-1)/2];
  15. padSrc = padarray(src,padsize,'symmetric','both');
  16. %2.循环求解每个区域对应的值
  17. output_img = zeros(height,width);
  18. iter = 0;
  19. for i=1:height
  20. for j=1:width
  21. slideWindow = zeros(w,w);
  22. slideWindow = padSrc(i:i+w-1,j:j+w-1);
  23. AHE_piexl = my_AHE_piexl(slideWindow,src(i,j));
  24. output_img(i,j) = AHE_piexl;
  25. iter = iter+1;
  26. disp(iter);
  27. end
  28. end
  29. output_img = uint8(output_img);
  30. end
  31. function [ outPiexl ] = my_AHE_piexl( window,inPiexl )
  32. %UNTITLED2 Summary of this function goes here
  33. % Detailed explanation goes here
  34. % 计算局部图像的直方图均衡化的像素对应值
  35. % 输入:window: 局部图像
  36. % inPiexl:输入像素
  37. % outPiexl:输出像素
  38. [height,width]=size(window);
  39. %1.像素灰度统计
  40. NumPixel = zeros(1,256);
  41. for i=1:height
  42. for j=1:width
  43. grayValue = window(i,j);
  44. NumPixel(1,grayValue+1) = NumPixel(1,grayValue+1)+1;
  45. end
  46. end
  47. %2.计算灰度分布密度
  48. ProbPixel = zeros(1,256);
  49. for k=1:256
  50. ProbPixel(1,k)=NumPixel(1,k)/(height*width*1.0);
  51. end
  52. %3.计算累积分布密度
  53. CumuPixel = zeros(1,256);
  54. CumuPixel(1,1) = ProbPixel(1,1);
  55. for l=2:256
  56. CumuPixel(1,l) = CumuPixel(1,l-1)+ProbPixel(1,l);
  57. end
  58. CumuPixel = uint8(255 .* CumuPixel + 0.5); %取整数
  59. %4.计算灰度值映射
  60. outPiexl = CumuPixel(inPiexl);
  61. end

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/78890
推荐阅读
相关标签
  

闽ICP备14008679号