关于JAVA图片处理

Light_year_87 2010-01-18 10:37:46
我写了个程序,处理几张老师给的卫星图片,但是图片格式是IMG的,这是什么格式?我怎么都读不进去,网上查了查说IMG格式是图片的集合,我又用软件在IMG格式图片里分离出几张BMP格式的图片,但是还是读入不进去...只能读入JPG格式的图片,麻烦大大们帮忙,有什么方法读入IMG格式图片吗?怎么读入BMP格式额啊?
老师给我一个文件上这样写的处理这个卫星图片地方法:。本研究中采用了一种称为“全局去条纹”的方
法。其原理为:设mik为第K 波段i 列的平均值, sik 为第K波段i 列的标准差,而设mi和si分别为“参考图像”对应的第K 波段i 列的平均值和标准差。什么是图片的波段啊?还有i 列的平均值和标准差?这些我都不懂啊...没有学过.麻烦有谁知道告诉我下啊 急死我了..

下面是我以前写的一个小程序:(得到图片纹理的)不知道怎么读入IMB格式图片啊..
import java.awt.image.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;

public class DSP extends Frame {

MenuBar menu_bar;
Menu fileMenu, aboutMenu;
MenuItem menu_openImage, menu_edgeImage, menu_exit;
MenuItem menu_about;


public Image im;
String about="";



public DSP() {

setTitle("Project");
menu_bar = new MenuBar();
fileMenu = new Menu("File");
aboutMenu = new Menu("About");

menu_openImage = new MenuItem("Open Image");
menu_edgeImage = new MenuItem("Edge Image");
menu_exit = new MenuItem("Exit");
menu_about = new MenuItem("About");

fileMenu.add(menu_openImage);
fileMenu.add(menu_edgeImage);
fileMenu.add(menu_exit);
aboutMenu.add(menu_about);

menu_bar.add(fileMenu);
menu_bar.add(aboutMenu);
this.setMenuBar(menu_bar);



addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});


menu_openImage.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {


JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = fileChooser.showOpenDialog(DSP.this);
if(result == JFileChooser.CANCEL_OPTION) {
return ;
}
File filename = fileChooser.getSelectedFile();
filename.canRead();

String fn = filename.getName();
int index = fn.lastIndexOf('.');

String extension = fn.substring(index + 1).toLowerCase();
String opfpath = filename.getPath();

if (extension.equals("bmp") || extension.equals("jpeg")) {
im = Toolkit.getDefaultToolkit().getImage(opfpath);
repaint();
} else {
JOptionPane.showMessageDialog(fileChooser, "Invalid File Name",
"Invalid File Name", JOptionPane.ERROR_MESSAGE);
}
}
});


menu_edgeImage.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
im=loadImage(im);
repaint();
}
});

menu_exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});

menu_about.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
about +="This program is made by Shen Dakun\n"+
"STUDENT ID :0809853D-I011-0015\n";
JOptionPane.showMessageDialog(null, about, "About",
JOptionPane.INFORMATION_MESSAGE);
}
});

}



@Override
public void paint(Graphics g){
g.drawImage(im, 0, 0, getWidth(), getHeight(), this);
}

public Image loadImage(Image im) {
int iw = im.getWidth(this);
int ih = im.getHeight(this);
int[] pixels = new int[iw * ih];



try{
PixelGrabber pg = new PixelGrabber(im, 0, 0, iw, ih, pixels, 0, iw);
pg.grabPixels();
}

catch (InterruptedException e3) {
e3.printStackTrace();
}

int[][] F = new int[iw][ih];
int n=0;
int[][] G = new int[iw][ih];
for(int j = 0;j<ih;j++) {
for(int i = 0;i<iw;i++){
F[i][j]=pixels[n];
n++;
}
}

for(int i =0;i<iw;i++){
for(int j =0;j<ih;j++){
if(i==0){
if(j==0){
G[i][j] = 2*F[i][j] - F[i+1][j] - F[i][j+1];
}
else if(j==ih-1){
G[i][j] = 2*F[i][j] -F[i+1][j]-F[i][j-1];
}
else {
G[i][j] = 3*F[i][j] - F[i+1][j]-F[i][j+1]-F[i][j-1];
}
}
else if(i==iw-1){
if(j==0){
G[i][j]=2*F[i][j]-F[i-1][j]-F[i][j+1];
}
else if(j==ih-1) {
G[i][j]=2*F[i][j]-F[i-1][j]-F[i][j-1];
}
else {
G[i][j]=3*F[i][j]-F[i-1][j]-F[i][j-1]-F[i][j+1];
}
}
else {
if(j==0) {
G[i][j] = 3*F[i][j]-F[i+1][j]-F[i-1][j]-F[i][j+1];
}
else if(j==ih-1){
G[i][j] = 3*F[i][j]-F[i+1][j]-F[i-1][j]-F[i][j-1];
}
else {
G[i][j] = 4*F[i][j]-F[i+1][j]-F[i-1][j]-F[i][j+1]-F[i][j-1];
}
}
}
}

n=0;
for(int j = 0;j<ih;j++) {
for(int i = 0;i<iw;i++){
pixels[n]=G[i][j];
n++;
}
}


ImageProducer tmp = new MemoryImageSource(iw, ih, pixels, 0, iw);
Image newimage = createImage(tmp);
return newimage;

}


public static void main(String[] args) {
Frame mydsp = new DSP();
mydsp.setSize(1024,768);
mydsp.setVisible(true);
}

}

...全文
1385 2 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
crazylaa 2010-01-19
  • 打赏
  • 举报
回复
去C++图形图像处理去问问看?java弄这种东西不知道有没有相关的接口包啥的。反正C++是很厉害的。
cndaofeng 2010-01-18
  • 打赏
  • 举报
回复
可以用EXtractor这个软件查看提取.img格式图片 

也可以用erdas里转换为tiff格式,然后在mapgis里转换为地图专用的mapgis的格式,好象是".mis"

发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2010-01-18 10:37
社区公告
暂无公告