Image processing j2me图像处理:浮雕效果和草图效果不起作用
我正在从事j2me平台上的一个图像处理项目。我成功地应用了简单的效果,它不涉及卷积矩阵,比如乌贼墨、灰度、负片和后期处理。我甚至用卷积矩阵实现了模糊效果:Image processing j2me图像处理:浮雕效果和草图效果不起作用,image-processing,java-me,edge-detection,emboss,Image Processing,Java Me,Edge Detection,Emboss,我正在从事j2me平台上的一个图像处理项目。我成功地应用了简单的效果,它不涉及卷积矩阵,比如乌贼墨、灰度、负片和后期处理。我甚至用卷积矩阵实现了模糊效果: int矩阵[][]={{1,1,1},{1,1,1},{1,1,1}} 但是,当我为浮雕效果和草图效果更改conv.矩阵时,我得到了意想不到的结果。下面是我的代码。请告诉我哪里出错了。 我使用以下卷积矩阵: 对于浮雕效果:int-matrix[][]={{-18,-9,0},{-9,9},{0,9,18} 对于边缘检测:int矩阵[][]=
int矩阵[][]={{1,1,1},{1,1,1},{1,1,1}}
但是,当我为浮雕效果和草图效果更改conv.矩阵时,我得到了意想不到的结果。下面是我的代码。请告诉我哪里出错了。
我使用以下卷积矩阵:
- 对于浮雕效果:
int-matrix[][]={{-18,-9,0},{-9,9},{0,9,18}
- 对于边缘检测:
int矩阵[][]={{0,9,0},{9,36,9},{0,9,0}
public void sketchEffect(){
/*
*下面是模糊效果的卷积矩阵,效果很好
*整数卷积矩阵[][]={
* {1, 1, 1},
* {1, 1, 1},
* {1, 1, 1}
* };
*
/*
*边缘数据处理的卷积矩阵(不工作)
*/
整数卷积矩阵[][]={
{0, 9, 0},
{9, -36, 9},
{0, 9, 0}
};
//加载图像
试一试{
image1=Image.createImage(“/image5.jpg”);
}捕获(IOEX异常){
例如printStackTrace();
}
//用于存储RGB值的1D阵列
//宽度=640px
//高度=360px
int sourceImageArray[]=新int[640*360];
image1.getRGB(sourceImageArray,0640,0,0640,360);
int aa、rr、bb、gg;
int a1、r1、g1、b1;
int sumR=0,sumG=0,sumB=0,sumA=0;
int-currentPix;
对于(int i=1;i<359;i++){
对于(int j=1;j<639;j++){
currentPix=sourceImageArray[(i*640)+j];
a1=(当前PIX>>24)和0xFF;
r1=(currentPix>>16)和0xFF;
g1=(当前PIX>>8)和0xFF;
b1=(当前PIX>>0)和0xFF;
/*
*将当前像素的相邻元素乘以其对应的
*卷积矩阵中的元素
*/
对于(int x=-1;x<2;x++){
对于(int y=-1;y<2;y++){
rr=(sourceImageArray[(i+x)*640)+(j+y)]>>16)和0xFF;
gg=(sourceImageArray[(i+x)*640)+(j+y)]>>8)和0xFF;
bb=(sourceImageArray[(i+x)*640)+(j+y)]>>0)和0xFF;
sumR+=(rr*卷积矩阵[x+1][y+1]);
sumG+=(gg*卷积矩阵[x+1][y+1]);
sumB+=(bb*卷积矩阵[x+1][y+1]);
rr=gg=bb=0;
}
}
sumR=sumR/9;
sumG=sumG/9;
sumB=sumB/9;
if(sumR<0){
sumR=0;
}
如果(总和<0){
sumG=0;
}
if(sumB<0){
sumB=0;
}
如果(sumR>255){
sumR=255;
}
如果(sumG>255){
sumG=255;
}
如果(sumB>255){
sumB=255;
}
sourceImageArray[(i*640)+j]=(a1)
public void sketchEffect() {
/*
* below is the convolution Matrix for blur effect and it works fine
* int convolutionMatrix[][] = {
* {1, 1, 1},
* {1, 1, 1},
* {1, 1, 1}
* };
*
/*
* Convolution matrix for edge dtetction(Not working)
*/
int convolutionMatrix[][] = {
{0, 9, 0},
{9, -36, 9},
{0, 9, 0}
};
//Loading image
try {
image1 = Image.createImage("/image5.jpg");
} catch (IOException ex) {
ex.printStackTrace();
}
// 1D array for storing RGB values
//Width = 640px
//Height = 360px
int sourceImageArray[] = new int[640 * 360];
image1.getRGB(sourceImageArray, 0, 640, 0, 0, 640, 360);
int aa, rr, bb, gg;
int a1, r1, g1, b1;
int sumR = 0, sumG = 0, sumB = 0, sumA = 0;
int currentPix;
for (int i = 1; i < 359; i++) {
for (int j = 1; j < 639; j++) {
currentPix = sourceImageArray[(i * 640) + j];
a1 = (currentPix >> 24) & 0xFF;
r1 = (currentPix >> 16) & 0xFF;
g1 = (currentPix >> 8) & 0xFF;
b1 = (currentPix >> 0) & 0xFF;
/*
* multiplying neighbouring elements of current pixel to its corresponding
* element in convolution matrix
*/
for (int x = -1; x < 2; x++) {
for (int y = -1; y < 2; y++) {
rr = (sourceImageArray[((i + x) * 640) + (j + y)] >> 16) & 0xFF;
gg = (sourceImageArray[((i + x) * 640) + (j + y)] >> 8) & 0xFF;
bb = (sourceImageArray[((i + x) * 640) + (j + y)] >> 0) & 0xFF;
sumR += (rr * convolutionMatrix[x + 1][y + 1]);
sumG += (gg * convolutionMatrix[x + 1][y + 1]);
sumB += (bb * convolutionMatrix[x + 1][y + 1]);
rr = gg = bb = 0;
}
}
sumR = sumR / 9;
sumG = sumG / 9;
sumB = sumB / 9;
if (sumR < 0) {
sumR = 0;
}
if (sumG < 0) {
sumG = 0;
}
if (sumB < 0) {
sumB = 0;
}
if (sumR > 255) {
sumR = 255;
}
if (sumG > 255) {
sumG = 255;
}
if (sumB > 255) {
sumB = 255;
}
sourceImageArray[(i * 640) + j] = (a1 << 24) | (sumR << 16)|(sumG << 8)| sumB;
sumR = sumB = sumG = 0;
rr = gg = bb = 0;
}
}
}