private void processImage() {
    if (image != null) {
        // Переменная для порога
        int threshold = 100;

        // Создаем панель для пороговых значений
        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);
        if (result == JOptionPane.OK_OPTION) {
            threshold = Integer.parseInt(thresholdField.getText());

            // Обновляем изображение и сохраняем его
            BufferedImage binarizedImage = binarizeImage(image, threshold);
            setImageIcon(binarizedImage);
            saveImage(binarizedImage);

            // Создаем гистограмму для исходного и бинаризованного изображения
            int[] histogram = createHistogram(image);
            int[] binarizedHistogram = createHistogram(binarizedImage);

            // Создаем окно для отображения гистограммы
            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);
            
            // Добавляем слушателя изменений значения порога
            thresholdField.addChangeListener(new ChangeListener() {
                @Override
                public void stateChanged(ChangeEvent e) {
                    threshold = Integer.parseInt(thresholdField.getText());
                    
                    BufferedImage binarizedImage = binarizeImage(image, threshold);
                    setImageIcon(binarizedImage);
                    saveImage(binarizedImage);
                    
                    binarizedHistogram = createHistogram(binarizedImage