**
Java中的影像銳化操作
**
一、該影像銳化的思想:
本文的影像銳化是將影像中的R,G,B的值分別從原影像中提出,然后將分別將這三個R,G,B的值分別與卷積核進行卷積,最終再將最后的三個卷積的結果合成為一個像素值,從而實作影像的銳化效果,
二、整體的影像銳化的代碼為:
package com.yf1105;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class ImageTest extends JFrame{
public static void main(String[] args) {
new ImageTest();
}
public ImageTest() {
setSize(1000,700);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
int[][] rgbOfImg = getImagePixel("image/3.jpg"/>
雖然這個與原圖的差別并不大,可能由于卷積核選擇的原因,
三、關鍵代碼的解讀

該段代碼主要是要去取出RGB影像的R,G,B值,然后分別對其R,G,B值分別進行卷積操作,然后將卷積后的結果再重新整合成一個int的像素值,從而就實作了影像的銳化處理,
當時看這段代碼的時候,發現這部分不是很懂,代碼如下:
R[i][j] = argb>>16 & 0xff;
G[i][j] = argb>>8 & 0xff;
B[i][j] = argb & 0xff;
不過仔細分析了一下位運算和與運算,我發現這段代碼就是在分別取出R,G,B的值,因為int類的像素值中是包括了a,r,g,b四個值,int是32位的,則這四個數按順序存在int中,每個數占8位,所以r對應得二進制需要去移動16位才能與oxff(即1111 1111)進行與運算,b對應得二進制需要去移動8位才能與oxff(即1111 1111)進行與運算,g就直接與oxff(即1111 1111)做與運算即可,雖然這樣表達有點難理解,那就看下面的示意圖吧:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/208906.html
標籤:其他
上一篇:PTA 6-1 面積求和
