关于卷积的理论这里就不啰嗦了。最近初步学习图像处理,使用java写了点对图像进项卷积操作的代码,实验的过程中感觉颇为惊奇,原来觉得高深的图像的锐化、浮雕、边缘检测等技术,使用简单的卷积就可以轻松实现。 我首先将一副彩色的图像使用photoshop将其转换为灰度的raw格式,这简化了程序。转化后的图像如图所示: ![这里写图片描述](https://img-blog.csdn.net/20170602212255480?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTkxMzYxMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
接下来要对该图像做卷积操作,下面的类中只有一个静态方法,它能对raw格式灰度图像数据做卷积操作:
public class Convolution {
public static byte[][] valide(byte[][] src,int[][] filter){
if(src[0].length{-1,-1,-1},{-1,8,-1},{-1,-1,-1}}; //边缘检测
int[][] ttt = {{-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1},{-1,-1,24,-1,-1},{-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1}};
byte [] raw = new byte[444*332];
FileInputStream in;
try {
in = new FileInputStream("flower444x332.raw");
in.read(raw);
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[][] image = new byte[332][444];
for(int i=0;i{-1,-1,0},{-1,0,1},{0,1,1}}; //浮雕 使用浮雕卷积核处理过后,图像明显有了浮雕的特征。 第二、强调边缘 int[][] ttt = {{1,1,1},{1,-7,1},{1,1,1}}; //强调边缘 边缘被加强了。 第三、边缘检测(3x3卷积核) int[][] ttt = {{-1,-1,-1},{-1,8,-1},{-1,-1,-1}}; //边缘检测 检测到了图像的轮廓。 第四、边缘检测(5x5卷积核) int[][] ttt = {{-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1},{-1,-1,24,-1,-1},{-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1}};
至此,感兴趣的可以自己尝试其他的卷积核。
|