免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1211 | 回复: 0
打印 上一主题 下一主题

网络机器人的视频监控系统(基于JPEG2000压缩) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-25 12:07 |只看该作者 |倒序浏览
   经过一个阶段的努力,终于初见效果。可以在浏览器中看到经过JPEG2000压缩的图片效果。一边经过Jasper库压缩,压缩后经过网络传输,在客户端用JJ2000对图像进行解压缩并在浏览器中显示。不过压缩的是有点慢,呵呵!
   在JJ2000中,工作分以下几步完成:
  • 首先是初始化参数列表:
      private ParameterList pl;
    private ParameterList defpl;
    defpl = new ParameterList();
    String[][] param = Decoder.getAllParameters();
    for (int ii=param.length-1; ii>=0; ii--) {
         if(param[ii][3]!=null)
      defpl.put(param[ii][0],param[ii][3]);
    }
        pl = new ParameterList(defpl);
    2. 初始化读入的流
       如何将输入的流转化成InputStream类型,然后将InputStream转化成RandomAccessIO类型。
    此种问题已经解决,需要结合许多对象进行操作:首先定义
    private byte[] ImageBuffer = new byte[80960];
    private InputStream imageStream;
    private DataInputStream reci = null;
    在初始化时:
    reci = new DataInputStream(basicSocket.getInputStream());
    imageStream = new ByteArrayInputStream(ImageBuffer);
    reci.read(ImageBuffer,index_JX,video_size-index_JX));如此把reci中的数据读入到ImageBuffer中去,而ImageBuffer又在初始化时转化成了imageStream流了。所以只需执行:
    RandomAccessIO in=new ISRandomAccessIO(imageStream,video_size,1,video_size);就可以将imageStream流转化成解码器的入口需要的流了。
    3. 执行解码器的解码链:
    // **** File Format ****
                // If the codestream is wrapped in the jp2 fileformat, Read the
                // file format wrapper
                ff = new FileFormatReader(in);
                ff.readFileFormat();
                if(ff.JP2FFUsed) {
                    in.seek(ff.getFirstCodeStreamPos());
                }
                
                // +----------------------------+
                // | Instantiate decoding chain |
                // +----------------------------+
                // **** Header decoder ****
                // Instantiate header decoder and read main header
                hi = new HeaderInfo();
         try {
      hd = new HeaderDecoder(in,pl,hi);
         } catch (EOFException e) {
      System.out.println("error1");
      return;
         }
         int nCompCod = hd.getNumComps();
                int nTiles = hi.siz.getNumTiles();
         decSpec = hd.getDecoderSpecs();
                // Get demixed bitdepths
                depth = new int[nCompCod];
                for(i=0; i
                // **** Bit stream reader ****
                try {
                    breader = BitstreamReaderAgent.
                        createInstance(in,hd,pl,decSpec,
                                       pl.getBooleanParameter("cdstr_info"),hi);
                } catch (IOException e) {
                    System.out.println("error2");
                    return;
                } catch (IllegalArgumentException e) {
                    System.out.println("error3");
                    return;
                }
                // **** Entropy decoder ****
                try {
                    entdec = hd.createEntropyDecoder(breader,pl);
                } catch (IllegalArgumentException e) {
                   System.out.println("error4");
                    return;
                }
                
                // **** ROI de-scaler ****
                try {
                    roids = hd.createROIDeScaler(entdec,pl,decSpec);
                } catch (IllegalArgumentException e) {
                    System.out.println("error5");
                    return;
                }
                   
                // **** Dequantizer ****
                try {
                    deq = hd.createDequantizer(roids,depth,decSpec);
                } catch (IllegalArgumentException e) {
                   System.out.println("error6");
                    return;
                }
                // **** Inverse wavelet transform ***
                try {
                   // full page inverse wavelet transform
                   invWT = InverseWT.createInstance(deq,decSpec);
                } catch (IllegalArgumentException e) {
                    System.out.println("error7");
                    return;
                }
         res = breader.getImgRes();
                invWT.setImgResLevel(res);
         // **** Data converter **** (after inverse transform module)
         converter = new ImgDataConverter(invWT,0);
                // **** Inverse component transformation ****
                ictransf = new InvCompTransf(converter,decSpec,depth,pl);
         // **** Color space mapping ****
      
                     color1 = ictransf;                 
         // This is the last image in the decoding chain and should be
         // assigned by the last transformation:
         BlkImgDataSrc decodedImage = color1;
         if(color1==null) {
      decodedImage = ictransf;
         }
         int nCompImg = decodedImage.getNumComps();
    4. 在浏览器中显示图片
    newImage = BlkImgDataSrcImageProducer.createImage(decodedImage);
    System.out.println("show new image");
          NetworkRobot.imagePanels[index].showImage(newImage);
    至此全部完成!



       



    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16942/showart_104577.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP