Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private BufferedImage NiblackAlgorithm(BufferedImage image) {
- if (image != null) {
- int windowSize = Integer.parseInt(windowSizeField.getText());
- double k = Double.parseDouble(niblackParamField.getText());
- System.out.println("" + windowSize + " " + k);
- if (windowSize % 2 == 1) {
- for (int i = windowSize / 2; i < image.getWidth() - windowSize / 2; ++i) {
- for (int j = windowSize / 2; j < image.getHeight() - windowSize / 2; ++j) {
- int[] h = new int[256];
- int[] blok = new int[windowSize * windowSize];
- for (int m = 0; m < windowSize; ++m) {
- for (int n = 0; n < windowSize; ++n) {
- Color c = new Color(image.getRGB(i - windowSize / 2 + m, j - windowSize / 2 + n));
- blok[m * windowSize + n] = c.getRed();
- h[c.getRed()]++;
- }
- }
- double mean = meanPix(0, 255, h);
- double sum = sumPix(0, 255, h);
- double var = 0;
- for (int T = 0; T < 255; T++) {
- var += (T - mean) * (T - mean) * h[T];
- }
- var /= sum;
- double threshold = mean + k * Math.sqrt(var);
- Color c = new Color(image.getRGB(i, j));
- image.setRGB(i, j, c.getRed() > threshold ? Color.WHITE.getRGB() : Color.BLACK.getRGB());
- }
- }
- }
- }
- return image;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement