Новый опыт фильтрации, умелое использование свертки --java

Возможно, ваш фильтр достиг узкого места, и всегда есть какие-то эффекты, которые невозможно выполнить. Помните одно, когда сомневаетесь, обратитесь за помощью к математике! Если вы используете понятие свертки в математике, вы можете добиться успеха.

Для конкретной концепции свертки вы можете обратиться за помощью к 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}};

Давай попробуем!!!

Supongo que te gusta

Origin blog.csdn.net/AkinanCZ/article/details/125451375
Recomendado
Clasificación