当前位置:   article > 正文

matlab 双边滤波(彩色图)_双边滤波 matlab

双边滤波 matlab
  1. % matlab 2012b
  2. % 彩色图的双边滤波
  3. clc;
  4. clear;
  5. src=imread('cs.jpg'); %加载彩色图
  6. %-------双边滤波 参数 -----------------
  7. r = 20; %半径 窗口 长 == 2*r+1
  8. sigma_space = 15.0; %空间标准差
  9. sigma_color = 10.0; %相似标准差
  10. w_space = zeros(1,r+1); %空间权重
  11. for i = 1:r+1 %i为横坐标之差的绝对值 + 1
  12. for j = 1:r+1 %j为纵坐标之差的绝对值 + 1
  13. w_space(i,j) = exp(-double((i-1)^2 + (j-1)^2) / (2 * sigma_space^2));
  14. end
  15. end
  16. w_color = zeros(1,256); %相似权重
  17. for i = 1:256 %i为像素值之差的绝对值 + 1
  18. w_color(i) = exp(-double((i-1)^2) / (2 * sigma_color^2));
  19. end
  20. %disp(w_space);
  21. %disp(w_color);
  22. %break;
  23. %--------- 进行滤波 ------------------
  24. src=double(src);
  25. [height,width,channel] = size(src);
  26. if channel ~= 3 %判断是否为3通道彩色图
  27. break; %不是则退出函数
  28. end
  29. dst = src;
  30. for h = 1+r:height-r
  31. for w = 1+r:width-r %窗口中心
  32. for c = 1:channel %彩色图 三通道
  33. w_sum = 0; %权值和
  34. p_sum = 0; %权值未归一化与像素值的乘积和
  35. p_c = src(h,w,c); %中心像素点的值
  36. for j = h-r:h+r
  37. for i = w-r:w+r %遍历窗口内的像素
  38. p_t = src(j,i,c); %像素点的值 以及未归一化的权值
  39. w_tmp = w_space(abs(i-w)+1,abs(j-h)+1) * w_color(abs(p_c-p_t)+1);
  40. p_sum = p_sum + p_t * w_tmp; %权值未归一化与像素值的乘积和
  41. w_sum = w_sum + w_tmp; %权值和
  42. end
  43. end
  44. p_sum = p_sum / w_sum; %归一化
  45. dst(h,w,c) = p_sum; %赋值
  46. end
  47. end
  48. end
  49. %转换格式 显示
  50. src = uint8(src);
  51. dst = uint8(dst);
  52. subplot(121),imshow(src);
  53. subplot(122),imshow(dst);


参考:
https://blog.csdn.net/l_eop/article/details/81812277
https://blog.csdn.net/qq_36359022/article/details/80198890
opencv源码 bilateral_filter.cpp

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

闽ICP备14008679号