Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
x軸方向のsobelフィルタのサンプル(Java)
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
public class ImageFilter {
/**
* RGBで表される画素をグレースケールの画素へ変換します。
* @param rgb RGBで表される画素
* @return グレースケールの画素
*/
public static int getGrayScale(int rgb) {
return ((rgb & 0x0000FF) +
((rgb & 0x00FF00) >> 8) +
((rgb & 0xFF0000) >> 16)) / 3;
}
/**
* グレースケールの画素をRGBで表される画素へ変換します。
* @param p 画素
* @return RGBで表される画素
*/
public static int getRGB(int p)
{ return ((p << 16) | (p << 8) | p); }
public static void main(String[] args) {
try {
// 画像の読み込み
BufferedImage image = ImageIO.read(new File("input.png"));
// 出力画像の生成
BufferedImage filtered = new BufferedImage(
image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
for (int x = 1; x < image.getWidth() - 1; ++x) {
for (int y = 1; y < image.getHeight() - 1; ++y) {
// ============この部分を書き換える===============
// ここでは例としてx軸方向のsobelフィルタの処理を記述する
// x軸方向のsobelフィルタを適用
int pixel = Math.abs(((
getGrayScale(
// (x + 1, y - 1)の画素を取得
image.getRGB(x + 1, y - 1)
) +
2 * getGrayScale(image.getRGB(x + 1, y)) +
getGrayScale(image.getRGB(x + 1, y + 1))
) - (
getGrayScale(image.getRGB(x - 1, y - 1)) +
2 * getGrayScale(image.getRGB(x - 1, y)) +
getGrayScale(image.getRGB(x - 1, y + 1))
)
) / 4
);
// ===============================================
// 画素をセット
filtered.setRGB(x, y, getRGB(pixel));
}
}
// 出力
ImageIO.write(filtered, "png", new File("output.png"));
} catch(Exception e) { e.printStackTrace(); }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.