Возможно, ваш фильтр достиг узкого места, и всегда есть какие-то эффекты, которые невозможно выполнить. Помните одно, когда сомневаетесь, обратитесь за помощью к математике! Если вы используете понятие свертки в математике, вы можете добиться успеха.
Для конкретной концепции свертки вы можете обратиться за помощью к Du Niang, Вот краткое объяснение того, как его использовать.
Создайте ядро свертки, рассчитанное по предшественникам, используйте его центр для перекрытия с нужным пикселем, затем умножьте соответствующие позиции, а затем добавьте их все, чтобы получить свертка.
Может быть, это звучит более абстрактно, и невозможно представить его действие, но для вас есть картины и истины.
И эффект рельефа после обработки свертки:
Мы можем начать делать:
public int juanji(int[][] karr/*ядро свертки, легко переключаемое*/,int[][] tem){ инт кк=0; for(int i=0;i< karr.length;i++){ for(int j=0;j<karr[i].length;j++){ kk+=karr[i][j]*tem[i][j]/*вычисление свертки, необходимые пиксели*/; } } вернуть кк; }//метод расчета свертки
Расчёт пикселя написан! Начните использовать все изображение!
public void bejuan(Graphics g,int[][] karr){ int[][] imgpix=getpix("C:\\Users\\27259\\Desktop\\aniya.png");//получить картинку в пикселях int [][] temr=new int[karr.length][karr[0].length]; int[][] temg=new int[karr.length][karr[0].length]; int[][] temb=new int[karr.length][karr[0].length];/*Количество пикселей, необходимых для свертки одного пикселя*/ /*Стоит отметить, что R, G, B Split для поиска свертки дают лучшие результаты */ int[] ll=new int[3];//Отдельно храним значения R, G, B for(int i=0;i< imgpix.length- karr.length +1/*Максимальный диапазон пикселей до быть разыскиваемым*/;i++){ for(int j=0;j< imgpix[0].length-karr[0].length+1/*Максимальный диапазон искомых пикселей*/ ;j++){ for( int a=0;a<karr.length;a++){ for(int b=0;b<karr.length;b++){ разделить(imgpix[i+a][j+b]) ;
temr[a][b]=красный;
temg[a][b]=зеленый;
temb[a][b]=синий;
}
}
ll[0]=juanji(karr,temr);
ll[1]=juanji (karr,temg);
ll[2]=juanji(karr,temb);//Получить значения R, G и B завершённой свертки
for(int n =0;n<3;n++){ if (ll[n]>255){ ll[n]=255; } if(ll[n]<0){ ll[n]=0; } }//Не забудьте оценить значения R, G, B для предотвращение пересечения границ Color cl=new Color (ll[0],ll[1],ll[2]); g.setColor(cl);//Установить запутанный цвет
g.fillRect(500+i,200+j,1,1);
}
}
}
Ну и другие эффекты:
Резкость:
Ядро свертки:
int[][] karr1={ {-1,-1,-1},{-1,9,-1},{-1,-1,-1}};
Горизонтальный профиль:
Ядро свертки:
int[][] karr={ {-1,-1,-1},{-1,8,-1},{-1,-1,-1}};
Давай попробуем!!!