ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅, ΠΎΡ‡Π΅Π½ΡŒ быстро...
Π Π°Π±ΠΎΡ‚Π°Π΅ΠΌ вмСстС Π΄ΠΎ ΠΏΠΎΠ±Π΅Π΄Ρ‹

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. 
Цифровая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. 
ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»ΡƒΡ‚ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

String outputDir = src. substring (0, indexOfFilename) + «»; Return step == commonStep? step: iterationStep (image, step); Public static void main (String args) throws IOException {. File outputGrayscaleFile = new File (outputGrayscalePath); System.out.println («use path to file as parameter»); Return grayscale == null? performGrayscale (): grayscale; For (int y = 0; y < originalRaster… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Цифровая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»ΡƒΡ‚ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π“Π»Π°Π²Π½Ρ‹ΠΉ класс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

public class Main {.

public static void main (String[] args) throws IOException {.

if (args.length < 1) {.

System.out.println («use path to file as parameter»);

return;

}.

String src = args[0];

int indexOfFilename = src. lastIndexOf (««) + 1;

String outputDir = src. substring (0, indexOfFilename) + «» ;

String[] filename = src. substring (indexOfFilename).split («.»);

String name = filename[0];

String ext = «.» + filename[1];

String grayscaleName = name + «_gray» + ext;

String binaryName = name + «_bin.bmp» ;

String outputGrayscalePath = outputDir + grayscaleName;

String outputBinaryPath = outputDir + binaryName;

File outputGrayscaleFile = new File (outputGrayscalePath);

File outputBinaryFile = new File (outputBinaryPath);

BufferedImage original = ImageIO. read (new File (src));

Performer performer = Performer. create (original);

BufferedImage grayscale = performer. grayscale ();

BufferedImage binary = performer. binary ();

ImageIO.write (grayscale, «jpg», outputGrayscaleFile);

ImageIO.write (binary, «bmp», outputBinaryFile);

}.

}.

Класс, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ изобраТСния:

import java.awt.Color;

import java.awt.image.BufferedImage;

import java.awt.image.Raster;

import java.awt.image.WritableRaster;

import java.util.ArrayList;

import java.util.List;

public class Performer {.

private BufferedImage image;

private BufferedImage grayscale;

private BufferedImage binary;

private Performer (BufferedImage image) {.

this.image = image;

}.

public static Performer create (BufferedImage image) {.

return new Performer (image);

}.

public BufferedImage grayscale () {.

return grayscale == null? performGrayscale (): grayscale;

}.

public BufferedImage binary () {.

return binary == null? performBinary (): binary;

}.

private BufferedImage performGrayscale () {.

grayscale = new BufferedImage (image.getWidth (), image. getHeight (),.

BufferedImage.TYPE_BYTE_GRAY);

WritableRaster raster = grayscale. getRaster ();

for (int x = 0; x < image. getWidth (); x++) {.

for (int y = 0; y < image. getHeight (); y++) {.

int rgb = image. getRGB (x, y);

Color c = new Color (rgb);

int r = c. getRed ();

int g = c. getGreen ();

int b = c. getBlue ();

int gray = (int) (r * 0.3 + g * 0.59 + b * 0.11);

raster.setPixel (x, y, new int[] { gray });

}.

}.

return grayscale;

}.

private BufferedImage performBinary () {.

int step = step (grayscale ());

int min = 0;

int max = 1;

Raster originalRaster = grayscale ().getData ();

binary = new BufferedImage (image.getWidth (), image. getHeight (),.

BufferedImage.TYPE_BYTE_BINARY);

WritableRaster resultRaster = binary. getRaster ();

for (int x = 0; x < originalRaster. getWidth (); x++) {.

for (int y = 0; y < originalRaster. getHeight (); y++) {.

int pix = originalRaster. getPixel (x, y, (int[]) null)[0];

if (pix < step) {.

resultRaster.setPixel (x, y, new int[] { min });

} else {.

resultRaster.setPixel (x, y, new int[] { max });

}.

}.

}.

return binary;

}.

private int step (BufferedImage image) {.

return iterationStep (image, commonStep (image));

}.

private int commonStep (BufferedImage image) {.

int min = 255;

int max = 0;

Raster raster = image. getData ();

for (int x = 0; x < raster. getWidth (); x++) {.

for (int y = 0; y < raster. getHeight (); y++) {.

int pix = raster. getPixel (x, y, (int[]) null)[0];

if (pix < min) {.

min = pix;

}.

if (pix > max) {.

max = pix;

}.

}.

}.

return (min + max) / 2;

}.

private int iterationStep (BufferedImage image, int commonStep) {.

List min = new ArrayList ();

List max = new ArrayList ();

Raster raster = image. getData ();

for (int x = 0; x < raster. getWidth (); x++) {.

for (int y = 0; y < raster. getHeight (); y++) {.

int pix = raster. getPixel (x, y, (int[]) null)[0];

if (pix >= commonStep) {.

max.add (pix);

} else {.

min.add (pix);

}.

}.

}.

int step = (average (min) + average (max)) / 2;

return step == commonStep? step: iterationStep (image, step);

}.

private int average (List list) {.

int result = 0;

for (Integer pix: list) {.

result += pix;

}.

return list. size () == 0? 0: result / list. size ();

}.

}.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ исходного изобраТСния ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ 2 Ρ„Π°ΠΉΠ»Π° (ΠΏΠΎΠ»ΡƒΡ‚ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅).

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ