1、先把图片导入到Mathematica里面,并把图片的大小限定为500像素*365像素。这么做的目的是,既保持图片清晰,又保证处理图像的时候,不会占用过多的内存而导致计算机卡顿。
2、对图片进行栅格化,使之变成三通道图片。
3、然后,把图片转化为图片数据;从数据结构可以看出来,图片是3通道的500*365大小的图片。我们进行图片卷积处理,本质上,是对图片数据进行卷积处理。
4、要实现卷积,还需要分离通道,也就是把图片数据分割为3个500*365的矩阵。这样,对每一个矩阵(矩阵的每一个数值,恰好是相应的像素的数值)进行卷积处理,就相当于对img的每个通道进行处理。
5、对img的第一个通道(的数据)进行处理,可以细化为对坡庥汩赴每一个非边界像素的邻域进行处理。单独分离出第二行的第二个像素与其8邻域的数值所构成的3*3矩阵:u = 数据[[1 ;; 3, 1 ;; 3荑樊综鲶, 1]];然后再把这个矩阵展开为9阶向量:A = u // Flatten
6、现在给出卷积内核:B = {1, 1, 1, 1, -7, 1, 1, 1, 1}
7、用A和B的卷积(也就是向量的点积)来代替这个像素的值;对每一个非边界像素,都进行这稍僚敉视个操作,就会得到img第一个通道图片的新的图片数据:dataⅠ=Table[Flatten[数据[[荏鱿胫协n - 1 ;; n + 1, m - 1 ;; m + 1, 1]]].B, {n, 2, 364, 1}, {m, 2, 499, 1}]
8、对img的三个通道分别进行卷积处理。
9、然后,合成新的图片,标记为img0:Image /@ {data1, data2, data3} // ColorCombine卷积后的图片,效果如下。
10、图片处理前后的效果对比,见下图。