|
convolution mask 1 2 1 0 0 0 -1 -2 -1 scale = 8 |
|
In bipolar mode 1, above, positive edge values are represented in red and negative values in blue.
In the code below, you can select either an x-axis edge operator or the y-axis edge operator. As shown, the y-axis is selected.
//int mask[][] = { {-1, 0, 1},{-2, 0, 2},{-1, 0, 1} };
int mask[][] = {{1,2,1},{0, 0, 0},{-1,-2,-1}};
See Convolve.java, which does the actual work.
Convolve3.javaimport java.awt.image.*;
import java.awt.color.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.JFrame;
public class Convolve3 {
public static void main(String [] args) {
String filename = "blob.png";
if (args.length>0) filename = args[0];
int style = 1;
if (args.length>1) style = Integer.parseInt(args[1]);
int scl = 8;
if (args.length>2) scl = Integer.parseInt(args[2]);
ImagePanel p1 = new ImagePanel(filename);
int width = p1.img.getWidth();
int height = p1.img.getHeight();
if (width<64) p1.setMag(4);
p1.info();
ImageFrame f1 = new ImageFrame(p1);
f1.setLocation(10,10);
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//if (width<25) listImage.listGray(f1.img,filename);
int w = f1.getWidth();
int h = f1.getHeight();
//int mask[][] = { {-1, 0, 1},{-2, 0, 2},{-1, 0, 1} };
int mask[][] = {{1,2,1},{0, 0, 0},{-1,-2,-1}};
Convolve c = new Convolve(mask);
c.setScale(scl);
c.setBipolarStyle(style);
c.showMatrix(mask,"convolution mask");
BufferedImage outp = c.doConvolve(p1.img);
ImagePanel p2 = new ImagePanel(outp,"bipolar");
if (width<64) p2.setMag(4);
ImageFrame f2 = new ImageFrame(p2);
f2.setLocation(20+w,10);
f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//p2.writeImage("out3.png");
//if (width<25 && style==0) listImage.listGray(f2.img,"filtered image");
}
}
Maintained by John Loomis, updated Wed Mar 18 16:08:08 2020