Переделай код, чтобы преобразует полутоновое изображение в бинарное(черно-белое). Преобразование я должен вводить порог – порог,
относительно которого яркость пикселов меняется на черную или белую. private void processImage() {
if (image != null) {
int threshold=50;
// Создаем панель для пороговых значений
JPanel thresholdPanel = new JPanel(new GridLayout(1, 2));

// Создаем текстовое поле для порога
JTextField thresholdField = new JTextField(Integer.toString(threshold));
thresholdPanel.add(new JLabel("Порог: "));
thresholdPanel.add(thresholdField);

// Создаем окно для ввода пороговых значений
int result = JOptionPane.showConfirmDialog(null, thresholdPanel, “Введите пороговое значение”, JOptionPane.OK_CANCEL_OPTION);


BufferedImage binarizedImage = binarizeImage(image, threshold);
if (binarizedImage != null) {
// ИЗМЕНЕНИЕ: передаем в метод setImageIcon() бинаризованное изображение
setImageIcon(binarizedImage);
saveImage(binarizedImage);

// Создаем гистограмму для изображения
int[] histogram = new int[256];

// Создаем гистограмму для исходного изображения
for (int i = 0; i < image.getWidth(); i++) {
for (int j = 0; j < image.getHeight(); j++) {
int pixel = image.getRGB(i, j);
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = pixel & 0xff;
// Вычисляем яркость пикселя
int brightness = (int) (0.2126 * red + 0.7152 * green + 0.0722 * blue);
histogram[brightness]++;
}
}

// Обновляем гистограмму для бинаризованного изображения
int[] binarizedHistogram = new int[256];
for (int i = 0; i < binarizedImage.getWidth(); i++) {
for (int j = 0; j < binarizedImage.getHeight(); j++) {
int pixel = binarizedImage.getRGB(i, j);
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = pixel & 0xff;
int brightness = (int) (0.2126 * red + 0.7152 * green + 0.0722 * blue);
binarizedHistogram[brightness]++;
}
}

// Создаем окно для отображения гистограммы
JFrame histogramFrame = new JFrame(“Гистограмма”);
histogramFrame.setLayout(new GridLayout(2, 1));

// Создаем панель для гистограммы исходного изображения
JPanel histogramPanel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int max = Arrays.stream(histogram).max().getAsInt();
for (int i = 0; i < 256; i++) {
int height = (int) (300.0 * histogram[i] / max);
g.fillRect(i, 300 - height, 1, height);
}
}
};
histogramPanel.setPreferredSize(new Dimension(256, 300));

histogramFrame.add(new JLabel(“Гистограмма исходного изображения”));
histogramFrame.add(histogramPanel);

// Создаем панель для гистограммы бинаризованного изображения
JPanel histogramPanel2 = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int max = Arrays.stream(binarizedHistogram).max().getAsInt();
for (int i = 0; i < 256; i++) {
int height = (int) (300.0 * binarizedHistogram[i] / max);
g.fillRect(i, 300 - height, 1, height);
}
}
};
histogramPanel2.setPreferredSize(new Dimension(256, 300));

histogramFrame.add(new JLabel(“Гистограмма бинаризованного изображения”));
histogramFrame.add(histogramPanel2);

histogramFrame.pack();
histogramFrame.setLocationRelativeTo(null);
histogramFrame.setVisible(true);
} else {
JOptionPane.showMessageDialog(null,“Ошибка при бинаризации изображения.”, “Ошибка”, JOptionPane.ERROR_MESSAGE);
}

}
}
private BufferedImage binarizeImage(BufferedImage image, int threshold) {
int width = image.getWidth();
int height = image.getHeight();
BufferedImage binarizedImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g = binarizedImage.createGraphics();
g.drawImage(image, 0, 0, null);

for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int pixel = binarizedImage.getRGB(i, j);
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = pixel & 0xff;
int brightness = (int) (0.2126 * red + 0.7152 * green + 0.0722 * blue);

if (brightness >= threshold) {
binarizedImage.setRGB(i, j, Color.WHITE.getRGB());
} else {
binarizedImage.setRGB(i, j, Color.BLACK.getRGB());
}
}
}
return binarizedImage;
}