Advertisement
Guest User

Global_Thresholding

a guest
Sep 19th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.74 KB | None | 0 0
  1. clear, clc, close all
  2.  
  3. % Load test image
  4. img = im2double(imread('paper.png'));
  5.  
  6. % Perform global thresholding with Otsu's method
  7. level = graythresh(img);
  8. globalBwImg = im2bw(img, level);
  9.  
  10. % Decide local thresholding parameters
  11. [row col] = size(img);
  12. stepSize = 16;
  13. tileSize = 32;
  14. varThresh = 0.0005;
  15.  
  16. % Perform locally adaptive thresholding
  17. localBwImg = zeros(row, col);
  18. uniformMask = zeros(row, col);
  19. threshIm = zeros(row / stepSize, col/ stepSize);
  20. for i = 1: row / stepSize
  21.  
  22. % Get indices for row
  23. rowStep = (i - 1) * stepSize + 1 : i * stepSize;
  24. rowTile = (i - 1) * stepSize + 1 : (i + 1) * stepSize;
  25. if i == row / stepSize
  26. rowTile = (i-2) * stepSize + 1 : i * stepSize;
  27. end
  28.  
  29. % Calculate Otsu's threshold for row
  30. rowThresh = graythresh(img(rowTile, :));
  31. for j = 1: col / stepSize
  32.  
  33. % Get indices for column
  34. colStep = (j - 1) * stepSize + 1 : j * stepSize;
  35. colTile = (j - 1) * stepSize + 1 : (j + 1) * stepSize;
  36. if j == col / stepSize
  37. colTile = (j - 2) * stepSize + 1 : j * stepSize;
  38. end
  39.  
  40. % Calculate local variance
  41. step = img(rowStep, colStep);
  42. varStep = var(step(:));
  43.  
  44. % Calculate local Otsu's threshold
  45. tile = img(rowTile, colTile);
  46. localThresh = graythresh(tile);
  47.  
  48. % Threshold based on local Otsu's threshold
  49. if (varStep > varThresh)
  50. localBwImg(rowStep, colStep) = im2bw(step, localThresh);
  51. uniformMask(rowStep, colStep) = ones(stepSize, stepSize);
  52. threshIm(i, j) = localThresh;
  53.  
  54. % Threshold based on local mean
  55. else
  56. localMean = mean(tile(:));
  57. threshIm(i, j) = 0;
  58. if (localMean > min(rowThresh,level))
  59. localBwImg(rowStep, colStep) = ones(stepSize, stepSize);
  60. else
  61. localBwImg(rowStep, colStep) = zeros(stepSize, stepSize);
  62. end
  63. uniformMask(rowStep, colStep) = zeros(stepSize, stepSize);
  64. end
  65. end % j
  66. end % i
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement