filter_laplacian.m
上传用户:trade789
上传日期:2018-05-10
资源大小:603k
文件大小:2k
源码类别:

2D图形编程

开发平台:

Matlab

  1. %/////////////////////////////////////////////////////////////////////////////////////////////
  2. % Author : Scott Ettinger
  3. %
  4. % filter_gaussian(img, order, sig)  
  5. %
  6. % The image is first padded with the outer image data enough times to allow for the size of the 
  7. % filter used. 
  8. function image_out = filter_gaussian(img,order,sig)
  9. h1 = gauss1d(order,sig); %create filter coefficient matrix
  10. h2 = conv2(h1, [.5 0 -.5]);
  11. h3 = conv2(h2,h2);
  12. h3 = h3/sum(abs(h3));
  13. order = length(h3);
  14. img2 = img;
  15. for i=1:floor(order/2)  %pad image borders with enough for filter order
  16.     
  17.     [h,w] = size(img2);
  18.    
  19.     img2 = [img2(1,1)  img2(1,:)  img2(1,w);
  20.             img2(:,1)  img2       img2(:,w);
  21.             img2(h,1)  img2(h,:)  img2(h,w)];
  22. end 
  23.    
  24.     
  25. image_out = conv2(img2,h3','valid'); % do the filtering
  26. image_out = image_out(:,floor(order/2)+1:end-floor(order/2));
  27. image_out2 = conv2(img2,h3,'valid'); % do the filtering
  28. image_out2 = image_out2(floor(order/2)+1:end-floor(order/2),:);
  29. image_out = -image_out-image_out2;
  30. %/////////////////////////////////////////////////////////////////////////////////////////
  31. function f = gauss1d(order,sig)
  32. f=0;
  33. i=0;
  34. j=0;
  35. %generate gaussian coefficients 
  36. for x = -fix(order/2):1:fix(order/2)
  37.     i = i + 1;
  38.     f(i) = 1/2/pi*exp(-((x^2)/(2*sig^2)));
  39. end
  40. f = f / sum(sum(f)); %normalize filter
  41. %/////////////////////////////////////////////////////////////////////////////////////////
  42. function f = gauss2d(order,sig)
  43. f=0;
  44. i=0;
  45. j=0;
  46. %generate gaussian coefficients 
  47. for x = -fix(order/2):1:fix(order/2)
  48.     j=j+1;
  49.     i=0;
  50.     for y = -fix(order/2):1:fix(order/2)
  51.         i=i+1;
  52.         f(i,j) = 1/2/pi*exp(-((x^2+y^2)/(2*sig^2)));
  53.     end
  54. end
  55. f = f / sum(sum(f)); %normalize filter