Переделай код, чтобы участки, не попавшие в диапазон порога, образуют после препарирования черный фон. // Гистограмма для sawtooth4Image()
					private void sawtooth4Image() {
					if (image != null) {
					BufferedImage combinedImage = deepCopy(image); // Создаем копию исходного изображения
					int teethNumber = userInput("Введите количество зубцов: "); // Запрашиваем количество зубцов
					// Запрос значения порогов в цикле до тех пор, пока пользователь не введет правильные значения
					float t1 = 0, t2 = 0;
					boolean valid = false;
					while (!valid) {
					t1 = userInput("Введите значение порога 1: ", 0, 255);
					t2 = userInput("Введите значение порога 2: ", 0, 255);
					if (t2 > t1) {
					BufferedImage[] sawtoothContrastImages = ImageReader.sawtoothContrastU(image, t1, t2, teethNumber); // Создаем массив изображений с контрастированными зубцами
					// Объединяем полученные изображения
					for (int y = 0; y < combinedImage.getHeight(); y++) {
					for (int x = 0; x < combinedImage.getWidth(); x++) {
					int rgb = sawtoothContrastImages[y % sawtoothContrastImages.length].getRGB(x, y);
					int red = (rgb >> 16) & 0xFF;
					int green = (rgb >> 8) & 0xFF;
					int blue = rgb & 0xFF;
					combinedImage.setRGB(x, y, (red << 16) | (green << 8) | blue);
					}
					}
					valid = true;
					} else {
					JOptionPane.showMessageDialog(null, "Значение порога 2 должно быть больше порога 1");
					}
					}
					setImageIcon(combinedImage);
					saveImage(combinedImage);
					int[] originalHistogram = ImageReader.getImageHistogram(image);
					int[] sawtoothHistogram = ImageReader.getImageHistogram(combinedImage);
					JFrame histogramFrame = new JFrame("Гистограммы");
					histogramFrame.setLayout(new GridLayout(1, 2, 10, 10));
					JPanel originalHistogramPanel = ImageReader.createHistogramPanel(originalHistogram, "Гистограмма исходного изображения");
					JPanel sawtoothHistogramPanel = ImageReader.createHistogramPanel(sawtoothHistogram, "Гистограмма после контрастирования");
					histogramFrame.add(originalHistogramPanel);
					histogramFrame.add(sawtoothHistogramPanel);
					histogramFrame.pack();
					histogramFrame.setLocationRelativeTo(null);
					histogramFrame.setVisible(true);
					}
					}

					public static int userInput(String prompt) {
						String input = JOptionPane.showInputDialog(prompt);
						return Integer.parseInt(input);
						}
						

public static BufferedImage[] sawtoothContrastU(BufferedImage image, float t1, float t2, int teethNumber) {
BufferedImage[] sawtoothContrastImages = new BufferedImage[teethNumber];
float slope = 255 / (t2 - t1);
float offset = -t1 * slope;
for (int i = 0; i < teethNumber; i++) {
BufferedImage sawtoothImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
int rgb = image.getRGB(x, y);
int red = (rgb >> 16) & 0xFF;
int green = (rgb >> 8) & 0xFF;
int blue = rgb & 0xFF;
float gray = (float) ((red + green + blue) / 3.0);
float sawtoothValue = (gray + (i / (float) teethNumber) * 255) % 510;
if (sawtoothValue > 255)
sawtoothValue = 510 - sawtoothValue;
sawtoothValue = sawtoothValue * slope + offset;
int sawtoothGray = Math.round(sawtoothValue);
int sawtoothRGB = (sawtoothGray << 16) | (sawtoothGray << 8) | sawtoothGray;
sawtoothImage.setRGB(x, y, sawtoothRGB);
}
}
sawtoothContrastImages[i] = sawtoothImage;
}
return sawtoothContrastImages;
}