Мое задание - написать монохромный (черно-белый) противотуманный фильтр, чтобы изменить изображение так, чтобы оно выглядело так, как будто оно было снято в туманный день. Для этого измените каждое значение на изображении на среднее значение самого значения, значения рядом с ним (4 или все 8) и случайное значение от 0 до 255 ((short)(Math.random() * 256
) получат случайное число). Мой учитель не отвечает по выходным за помощью.
Так вот, где я нахожусь:
Я улучшил свой код, потому что он делает изображение черно-белым. Но я думал, что это будет выделяться больше, чем черно-белое. Я просто хочу удостовериться, что я, по крайней мере, делаю то, что просил.
Учитель разработал несколько своих классов для этого задания и Интерфейс
Класс ImageProvider , который предоставляет изображение (изображение в формате .jpg)
java.lang.Object
продлен byjava.awt.Component
расширенный byimagelab.ImgProvider
Все реализованные интерфейсы:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable
Класс ImageLab
java.lang.Object
расширенный byimagelab. ImageLab
ImageLab - это платформа для разработки фильтров изображений. ImageLab начинается с создания меню всех доступных фильтров (те файлы .class, которые реализуют интерфейс ImageFilter @see ImageFilter).
Интерфейс ImageFilter
открытый интерфейс ImageFilter
Интерфейс ImageFilter реализован соответствующими фильтрами изображений.
Детали реализации Формат программы
При написании фильтра вы должны указать, что фильтр является членом пакета фильтра, поместив строку:
пакетные фильтры; в верхней части файла .java.
Чтобы ваш фильтр мог найти интерфейс ImageFilter, вы должны поставить строку:
импортировать imagelab. *; как вторая строка в файле.
Чтобы скомпилировать ваш фильтр (предположим, он называется MyFilter.java), перейдите в родительский каталог (каталог, в котором есть imagelab и фильтры в качестве подкаталогов) и введите:
javac filters / MyFilter.java
Чтобы запустить imageLab, вы должны быть в том же каталоге и набрать:
imagelab Java.ImageLab
package filters;
import imagelab.*;
public class Monochrome implements ImageFilter {
ImgProvider filteredImage;
public void filter (ImgProvider ip) {
short[][] mono = ip.getBWImage();//Convert the picture to B&W
short[][] mono2 = new short[mono.length][mono[0].length];
/**Go through both arrays and change every value in the image to the average of the value itself, the values next to it (4 or all 8) and a random value from 0 to 255
*/
for (int r = 1; r<mono.length-1; r++) {
for (int c = 1; c < mono[0].length-1; c++) {
int val = mono[r][c];
val += ((short)Math.random()*256); //random number
val += mono[r-1][c];
val += mono[r+1][c];
val += mono[r][c-1];
val += mono[r][c+1];
val /= 5;
val = (val < 0) ? -val : val;
if (val > 255) val = 255;
mono2[r][c] = (short)((val < 0) ? -val : val);
}//for c
}//for r;
filteredImage = new ImgProvider(); //create the new .jpg image
filteredImage.setBWImage(mono2); //set it to B&W using the monochrome settings
filteredImage.showPix("Monochrome of original image"); //label the image
}//filter
public ImgProvider getImgProvider() {
return filteredImage;
}//getImgProvider
public String getMenuLabel() {
return "Monochrome";
} //getMenuLabel
}