错误理解:java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!(JAVA编程:图像像素值处理)

#引述:
在使用java进行数字图像处理时,常常会遇到如下错误:
java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
起初,我坚信我的代码是没有问题的,但是经过再次了解图像像素的排列方式,即:图像空间坐标系之后…
#正文:
一、先来看一段用java来进行RGB图像像素值获取的代码:

 try{
            this.image=ImageIO.read(new File(this.image_path));//读取图像
            this.image_info=this.image.getColorModel().toString();//获取图像色彩空间信息
            this.width=this.image.getWidth();this.height=this.image.getHeight();//获取图像像素矩阵宽度和高度
            System.out.println(this.image.getHeight()+" "+this.image.getWidth());//打印图像像素矩阵宽度和高度
            //获取空间域像素值
            for (int height=0;height>16;//Red
                   this.rgb_value[1]=(this.RGB_value&0xff00)>>8;//Green
                   this.rgb_value[2]=(this.RGB_value&0xff);//Blue
                }
            }
            }
        catch (Exception e)
        {
            e.printStackTrace();
            System.out.println("图像读取失败");
        }

毫无悬念,运行后出现以下报错信息:
错误理解:java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!(JAVA编程:图像像素值处理)_第1张图片
二、下面对这个常见错误信息“数组下标越界”进行解释:
(1)System.out.println(this.image.getHeight()+" "+this.image.getWidth());//打印图像像素矩阵宽度和高度
此代码块对应输出信息为:1920 1080
(2)再来查看原图像的信息:
错误理解:java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!(JAVA编程:图像像素值处理)_第2张图片
看到这里,我开始觉得不对劲了,并且推断出:

//位深度为24,标准的三波段RGB图像
//这里的输出值的含义,图像的高度:1920px;图像宽度:1080px

(3)那么这里的报错根源在哪里呢?我们点击getRGB()后面的错误信息,可以看到对应的参数描述信息:
错误理解:java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!(JAVA编程:图像像素值处理)_第3张图片

这里的意思大致为:
//参数X坐标:是来自RGB或者sRGB彩色空间对应的像素值
//参数Y坐标:是来自RGB或者sRGB彩色空间对应的像素值

那么,现在问题的关键就转化成了:图像的空间坐标是如何定义的呢?
错误理解:java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!(JAVA编程:图像像素值处理)_第4张图片
(图片来自:冈萨雷斯和伍兹所著的《数字图像处理》第二版)
通过这张图片,我们可以得到的如下一个重要的对应关系:

heigh(图像高度)对应图像空间里面的X;
width(图像高度)对应图像空间里面的Y。

由此,我们可以得知,这里程序报错的原因是:
由于对图像空间坐标的误解,导致将getRGB(x,y)方法中的参数输入错误了,
因此:只需将参数调换即可,如下:

this.RGB_value=this.image.getRGB(width,height);//正确方式

于是,修改之后再次运行就正确了。

你可能感兴趣的:(java,图像处理,RGB)