/** * Gets a list of <code>IIOImage</code> objects for an image file. * * @param imageFile input image file. It can be any of the supported formats, including TIFF, * JPEG, GIF, PNG, BMP, JPEG, and PDF if GPL Ghostscript is installed * @return a list of <code>IIOImage</code> objects * @throws Exception */ public static List<IIOImage> getIIOImageList(File imageFile) throws IOException { File workingTiffFile = null; ImageReader reader = null; ImageInputStream iis = null; try { // convert PDF to TIFF if (imageFile.getName().toLowerCase().endsWith(".pdf")) { workingTiffFile = PdfUtilities.convertPdf2Tiff(imageFile); imageFile = workingTiffFile; } List<IIOImage> iioImageList = new ArrayList<IIOImage>(); String imageFileName = imageFile.getName(); String imageFormat = imageFileName.substring(imageFileName.lastIndexOf('.') + 1); if (imageFormat.matches("(pbm|pgm|ppm)")) { imageFormat = "pnm"; } else if (imageFormat.equals("jp2")) { imageFormat = "jpeg2000"; } Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(imageFormat); reader = readers.next(); if (reader == null) { throw new RuntimeException( "Need to install JAI Image I/O package.\nhttps://jai-imageio.dev.java.net"); } iis = ImageIO.createImageInputStream(imageFile); reader.setInput(iis); int imageTotal = reader.getNumImages(true); for (int i = 0; i < imageTotal; i++) { // IIOImage oimage = new IIOImage(reader.read(i), null, // reader.getImageMetadata(i)); IIOImage oimage = reader.readAll(i, reader.getDefaultReadParam()); iioImageList.add(oimage); } return iioImageList; } finally { try { if (iis != null) { iis.close(); } if (reader != null) { reader.dispose(); } } catch (Exception e) { // ignore } if (workingTiffFile != null && workingTiffFile.exists()) { workingTiffFile.delete(); } } }
@Override public void actionPerformed(ActionEvent e) { if (fc == null) { fc = new IDEFileChooser(); fc.setFileView(new IDEFileView()); fc.setAcceptAllFileFilterUsed(false); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setMultiSelectionEnabled(false); fc.setDialogTitle( messagesBundle.getString("ImageViewerPanelSaveAction.Choose_filename_to_save_4")); //$NON-NLS-1$ // prepare file filters IIORegistry theRegistry = IIORegistry.getDefaultInstance(); Iterator it = theRegistry.getServiceProviders(ImageWriterSpi.class, false); while (it.hasNext()) { ImageWriterSpi writer = (ImageWriterSpi) it.next(); if ((imageType == BufferedImage.TYPE_INT_ARGB || imageType == BufferedImage.TYPE_INT_ARGB_PRE) && "JPEG".equals(writer.getFormatNames()[0].toUpperCase())) continue; ImageWriterSpiFileFilter ff = new ImageWriterSpiFileFilter(writer); fc.addChoosableFileFilter(ff); } } if (fc.showSaveDialog(viewerPanel) == JFileChooser.APPROVE_OPTION) { File selectedFile = fc.getSelectedFile(); if (selectedFile != null) { String fileName = selectedFile.getAbsolutePath(); ImageWriterSpiFileFilter ff = (ImageWriterSpiFileFilter) fc.getFileFilter(); if (!ff.hasCorrectSuffix(fileName)) fileName = ff.addSuffix(fileName); selectedFile = new File(fileName); if (selectedFile.exists()) { String message = MessageFormat.format( messagesBundle.getString("ImageViewerPanelSaveAction.Overwrite_question_5"), //$NON-NLS-1$ fileName); if (JOptionPane.NO_OPTION == JOptionPane.showConfirmDialog( viewerPanel, message, messagesBundle.getString("ImageViewerPanelSaveAction.Warning_6"), //$NON-NLS-1$ JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE)) return; } writeToFile(selectedFile, ff); } } }
/** * Creates a list of TIFF image files from an image file. It basically converts images of other * formats to TIFF format, or a multi-page TIFF image to multiple TIFF image files. * * @param imageFile input image file * @param index an index of the page; -1 means all pages, as in a multi-page TIFF image * @return a list of TIFF image files * @throws Exception */ public static List<File> createTiffFiles(File imageFile, int index) throws IOException { List<File> tiffFiles = new ArrayList<File>(); String imageFileName = imageFile.getName(); String imageFormat = imageFileName.substring(imageFileName.lastIndexOf('.') + 1); Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(imageFormat); ImageReader reader = readers.next(); if (reader == null) { throw new RuntimeException( "Need to install JAI Image I/O package.\nhttps://jai-imageio.dev.java.net"); } ImageInputStream iis = ImageIO.createImageInputStream(imageFile); reader.setInput(iis); // Read the stream metadata // IIOMetadata streamMetadata = reader.getStreamMetadata(); // Set up the writeParam TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.US); tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED); // Get tif writer and set output to file Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(TIFF_FORMAT); ImageWriter writer = writers.next(); // Read the stream metadata IIOMetadata streamMetadata = writer.getDefaultStreamMetadata(tiffWriteParam); int imageTotal = reader.getNumImages(true); for (int i = 0; i < imageTotal; i++) { // all if index == -1; otherwise, only index-th if (index == -1 || i == index) { // BufferedImage bi = reader.read(i); // IIOImage oimage = new IIOImage(bi, null, reader.getImageMetadata(i)); IIOImage oimage = reader.readAll(i, reader.getDefaultReadParam()); File tiffFile = File.createTempFile(OUTPUT_FILE_NAME, TIFF_EXT); ImageOutputStream ios = ImageIO.createImageOutputStream(tiffFile); writer.setOutput(ios); writer.write(streamMetadata, oimage, tiffWriteParam); ios.close(); tiffFiles.add(tiffFile); } } writer.dispose(); reader.dispose(); return tiffFiles; }
public static List<File> createTiffFiles(List<IIOImage> imageList, int index, int dpiX, int dpiY) throws IOException { List<File> tiffFiles = new ArrayList<File>(); // Set up the writeParam TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.US); tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED); // Get tif writer and set output to file Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(TIFF_FORMAT); ImageWriter writer = writers.next(); if (writer == null) { throw new RuntimeException( "Need to install JAI Image I/O package.\nhttps://jai-imageio.dev.java.net"); } // Get the stream metadata IIOMetadata streamMetadata = writer.getDefaultStreamMetadata(tiffWriteParam); // all if index == -1; otherwise, only index-th for (IIOImage oimage : (index == -1 ? imageList : imageList.subList(index, index + 1))) { if (dpiX != 0 && dpiY != 0) { // Get the default image metadata. ImageTypeSpecifier imageType = ImageTypeSpecifier.createFromRenderedImage(oimage.getRenderedImage()); IIOMetadata imageMetadata = writer.getDefaultImageMetadata(imageType, null); imageMetadata = setDPIViaAPI(imageMetadata, dpiX, dpiY); oimage.setMetadata(imageMetadata); } File tiffFile = File.createTempFile(OUTPUT_FILE_NAME, TIFF_EXT); ImageOutputStream ios = ImageIO.createImageOutputStream(tiffFile); writer.setOutput(ios); writer.write(streamMetadata, oimage, tiffWriteParam); ios.close(); tiffFiles.add(tiffFile); } writer.dispose(); return tiffFiles; }
/** ****************** Open & Read an Image ********************** */ void OpenImage2() { int returnVal = jfc.showOpenDialog(IPToolKit.this); if (returnVal == JFileChooser.APPROVE_OPTION) { file1 = jfc.getSelectedFile(); String path = file.getAbsolutePath(); // image = Toolkit.getDefaultToolkit().getImage(path); try { try { inImage1 = new FileImageInputStream(file1); len1 = (int) inImage1.length(); byteArray1 = new byte[len1]; // System.out.println(len); inImage1.read(byteArray1, 0, len1); image1 = Toolkit.getDefaultToolkit().createImage(byteArray1); MediaTracker t = new MediaTracker(this); t.addImage(image1, 0); try { t.waitForID(1); } catch (Exception eeee) { System.out.println(eeee); } w1 = image1.getWidth(null); h1 = image1.getHeight(null); // System.out.println(w+"\t"+h); } catch (Exception fnfe) { JOptionPane.showMessageDialog(this, "File: Not Found"); } } catch (Exception ice) { JOptionPane.showMessageDialog(this, "File I/O Error"); } } }
public void actionPerformed(ActionEvent e) { String arg = (String) e.getActionCommand(); /** ******************** Open an Image **************** */ if (e.getSource() == m_Open) { int returnVal = jfc.showOpenDialog(IPToolKit.this); if (returnVal == JFileChooser.APPROVE_OPTION) { file = jfc.getSelectedFile(); String path = file.getAbsolutePath(); // image = Toolkit.getDefaultToolkit().getImage(path); try { try { inImage = new FileImageInputStream(file); len = (int) inImage.length(); byteArray = new byte[len]; // System.out.println(len); inImage.read(byteArray, 0, len); image = Toolkit.getDefaultToolkit().createImage(byteArray); MediaTracker t = new MediaTracker(this); t.addImage(image, 0); try { t.waitForID(0); } catch (Exception eeee) { System.out.println(eeee); } w = image.getWidth(null); h = image.getHeight(null); // System.out.println(w+"\t"+h); } catch (Exception fnfe) { JOptionPane.showMessageDialog(this, "File: Not Found"); } } catch (Exception ice) { JOptionPane.showMessageDialog(this, "File I/O Error"); } } if (image != null) { pix_temp = new int[h * w]; ImageIcon icon = new ImageIcon(image); lbl_img.setIcon(icon); setVisible(true); } pix_temp = pixel_grab(image, w, h); pix_temp = pix_pack(pix_temp, w, h); grayImageDisplay(w, h, pix_temp); } /** ****************** Add one image to another ************** */ if (e.getSource() == mAddImg) { OpenImage2(); pix_temp1 = new int[w * h]; pix_res = new int[w * h]; pix_temp1 = pixel_grab(image1, w1, h1); pix_temp1 = pix_pack(pix_temp1, w1, h1); for (int s = 0; s < w * h; s++) { pix_res[s] = pix_temp[s] + pix_temp1[s]; } ; pix_temp1 = saturate(pix_temp1, w, h); imageResultDisplay(w, h, pix_res); } /** * *********************** Add Constant value and then use Satuartion technique *************** */ if (e.getSource() == mAddSat) { String add_value; Image img_add = image; pixel_add = new int[w * h]; pixel_result = pixel_grab(img_add, w, h); add_value = JOptionPane.showInputDialog("Enter Value you wish to add to the image"); int number = Integer.parseInt(add_value); for (int r = 0; r < w * h; r++) { pixel_add[r] = number + pixel_result[r]; } pixel_add = saturate(pixel_add, w, h); pixel_add = pix_pack(pixel_add, w, h); imageResultDisplay(w, h, pixel_add); } /** ************ Add constant by Wrap Around technique ********** */ if (e.getSource() == mAddWrap) { String add_value; Image img_add = image; pixel_add = new int[w * h]; pixel_result = pixel_grab(img_add, w, h); add_value = JOptionPane.showInputDialog("Enter Value you wish to add to the image"); int number = Integer.parseInt(add_value); for (int r = 0; r < w * h; r++) { pixel_add[r] = number + pixel_result[r]; } pixel_add = WrapAround(pixel_add, w, h); pixel_add = pix_pack(pixel_add, w, h); imageResultDisplay(w, h, pixel_add); } /** ****************** Subtract one image from another ************** */ if (e.getSource() == mSubImg) { OpenImage2(); pix_temp1 = new int[w * h]; pix_res = new int[w * h]; pix_temp1 = pixel_grab(image1, w1, h1); pix_temp1 = pix_pack(pix_temp1, w1, h1); for (int s = 0; s < w * h; s++) { pix_res[s] = pix_temp[s] - pix_temp1[s]; } pix_temp1 = saturate(pix_temp1, w1, h1); imageResultDisplay(w1, h1, pix_res); } /** * *********************** Subtract Constant value and then use Satuartion technique * *************** */ if (e.getSource() == mSubSat) { String sub_value; Image img_add = image; pixel_sub = new int[w * h]; pixel_result = pixel_grab(img_add, w, h); sub_value = JOptionPane.showInputDialog("Enter Value you wish to subtract from the image"); int number = Integer.parseInt(sub_value); for (int r = 0; r < w * h; r++) { pixel_sub[r] = pixel_result[r] - number; } pixel_sub = saturate(pixel_sub, w, h); pixel_sub = pix_pack(pixel_sub, w, h); imageResultDisplay(w, h, pixel_sub); } /** ************ Subtract constant by Wrap Around technique ********** */ if (e.getSource() == mSubWrap) { String sub_value; Image img_add = image; pixel_sub = new int[w * h]; pixel_result = pixel_grab(img_add, w, h); sub_value = JOptionPane.showInputDialog("Enter Value you wish to add to the image"); int number = Integer.parseInt(sub_value); for (int r = 0; r < w * h; r++) { pixel_sub[r] = pixel_result[r] - number; } pixel_sub = WrapAround(pixel_sub, w, h); pixel_sub = pix_pack(pixel_sub, w, h); imageResultDisplay(w, h, pixel_sub); } /** ****************** Multiply one image with another ************** */ if (e.getSource() == mMulImg) { OpenImage2(); pix_temp1 = new int[w * h]; pix_res = new int[w * h]; pix_temp1 = pixel_grab(image1, w1, h1); pix_temp1 = pix_pack(pix_temp1, w1, h1); for (int s = 0; s < w * h; s++) { pix_res[s] = pix_temp[s] * pix_temp1[s]; } pix_temp1 = saturate(pix_temp1, w1, h1); imageResultDisplay(w1, h1, pix_res); } /** * *********************** Multiply Constant value and then use Satuartion technique * *************** */ if (e.getSource() == mMulSat) { String mul_value; Image img_mul = image; pixel_mul = new int[w * h]; pixel_result = pixel_grab(img_mul, w, h); mul_value = JOptionPane.showInputDialog("Enter Value you wish to multiply to the image"); int number = Integer.parseInt(mul_value); for (int r = 0; r < w * h; r++) { pixel_mul[r] = pixel_result[r] * number; } pixel_mul = saturate(pixel_mul, w, h); pixel_mul = pix_pack(pixel_mul, w, h); imageResultDisplay(w, h, pixel_mul); } /** ************ Multiply constant by Wrap Around technique ********** */ if (e.getSource() == mMulWrap) { String mul_value; Image img_mul = image; pixel_mul = new int[w * h]; pixel_result = pixel_grab(img_mul, w, h); mul_value = JOptionPane.showInputDialog("Enter Value you wish to multiply to the image"); int number = Integer.parseInt(mul_value); for (int r = 0; r < w * h; r++) { pixel_mul[r] = pixel_result[r] * number; } pixel_mul = WrapAround(pixel_mul, w, h); pixel_mul = pix_pack(pixel_mul, w, h); imageResultDisplay(w, h, pixel_mul); } /** ****************** Divide one image by another ************** */ if (e.getSource() == mDivImg) { OpenImage2(); pix_temp1 = new int[w * h]; pix_res = new int[w * h]; pix_temp1 = pixel_grab(image1, w1, h1); pix_temp1 = pix_pack(pix_temp1, w1, h1); for (int s = 0; s < w * h; s++) { pix_res[s] = pix_temp1[s] / pix_temp[s]; } // pix_temp1 = saturate(pix_temp1,w1,h1); pix_temp1 = WrapAround(pix_temp1, w, h); imageResultDisplay(w1, h1, pix_res); } /** * *********************** Divide by Constant value and then use Saturation technique * *************** */ if (e.getSource() == mDivSat) { String div_value; Image img_add = image; pixel_div = new int[w * h]; pixel_result = pixel_grab(img_add, w, h); div_value = JOptionPane.showInputDialog("Enter value to divide the image by"); int number = Integer.parseInt(div_value); for (int r = 0; r < w * h; r++) { pixel_div[r] = pixel_result[r] / number; } pixel_div = saturate(pixel_div, w, h); pixel_div = pix_pack(pixel_div, w, h); imageResultDisplay(w, h, pixel_div); } /** ************ Divide constant by Wrap Around technique ********** */ if (e.getSource() == mDivWrap) { String div_value; Image img_add = image; pixel_div = new int[w * h]; pixel_result = pixel_grab(img_add, w, h); div_value = JOptionPane.showInputDialog("Enter value to divide image by"); int number = Integer.parseInt(div_value); for (int r = 0; r < w * h; r++) { pixel_div[r] = pixel_result[r] / number; } pixel_div = WrapAround(pixel_div, w, h); pixel_div = pix_pack(pixel_div, w, h); imageResultDisplay(w, h, pixel_div); } /** ******************** Thresholding ************* */ if (e.getSource() == mThreshold) { String thresh_value; Image img_add = image; pixel_result = pixel_grab(img_add, w, h); thresh_value = JOptionPane.showInputDialog("Enter value to threshold the image"); int number = Integer.parseInt(thresh_value); for (int r = 0; r < w * h; r++) { if (pixel_result[r] >= number) pixel_result[r] = 255; else if (pixel_result[r] <= number) pixel_result[r] = 0; } pixel_result = pix_pack(pixel_result, w, h); imageResultDisplay(w, h, pixel_result); } if (e.getSource() == m_Save) { FileImageOutputStream src_img; int returnVal = jfc.showSaveDialog(IPToolKit.this); if (returnVal == JFileChooser.APPROVE_OPTION) { File fileR = jfc.getSelectedFile(); String fileToSave = file.getAbsolutePath(); if (!fileToSave.toLowerCase().endsWith(".jpg")) { fileR = new File(fileToSave + ".jpg"); } try { src_img = new FileImageOutputStream(fileR); buf_img = getImageFromArray(pixel_result, w, h); ImageIO.write(buf_img, "jpg", src_img); } catch (IOException ex8) { System.out.println(ex8); } } // } } /** ***************************** Increase brightness **************** */ if (e.getSource() == mBright) { String bright_value; Image img_add = image; pixel_result = pixel_grab(img_add, w, h); bright_value = JOptionPane.showInputDialog("Enter value to increase brightness"); int number = Integer.parseInt(bright_value); for (int r = 0; r < w * h; r++) { pixel_result[r] = pixel_result[r] + number; } pixel_result = saturate(pixel_result, w, h); pixel_result = pix_pack(pixel_result, w, h); imageResultDisplay(w, h, pixel_result); } /** ****************** Contrast Strtching *************** */ if (e.getSource() == mContrast) { String cont_value1, cont_value2; Image img_add = image; pixel_cont = new int[w * h]; pixel_result = pixel_grab(img_add, w, h); cont_value1 = JOptionPane.showInputDialog("Enter lower limit for contrast stretch"); int number = Integer.parseInt(cont_value1); cont_value2 = JOptionPane.showInputDialog("Enter higher limit for contrast stretch"); int number1 = Integer.parseInt(cont_value2); for (int r = 0; r < w * h; r++) { if (pixel_result[r] <= number1) { pixel_cont[r] = pixel_result[r] - 50; if (pixel_cont[r] < 0) pixel_cont[r] = 0; } else if (pixel_result[r] >= number) { pixel_cont[r] = pixel_result[r] + 50; if (pixel_cont[r] > 255) pixel_cont[r] = 255; } else pixel_cont[r] = pixel_result[r]; } pixel_cont = saturate(pixel_cont, w, h); pixel_cont = pix_pack(pixel_cont, w, h); imageResultDisplay(w, h, pixel_cont); } /** ******************* Low Pass Filter ****************** */ if (e.getSource() == mlowPass) { int mask[][] = {{1, 1, 1}, {1, 1, 1}, {1, 1, 1}}; pixel_result = pixel_grab(image, w, h); int pix_tempLow[][] = new int[h][w]; pix_tempLow = OneD_ArrayToTwoD_Array(w, h, pixel_result); pix_tempLow = MaskOperation(w, h, pix_tempLow, mask); int pix_temp1D[] = new int[(w) * (h)]; pix_temp1D = TwoD_ArrayToOneD_Array(w, h, pix_tempLow); pix_temp1D = restrict(pix_temp1D); pix_temp1D = pix_pack(pix_temp1D, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_temp1D); } /** ********************* High Pass Filter *************** */ if (e.getSource() == mhighPass) { int mask[][] = {{-1, -1, -1}, {-1, 8, -1}, {-1, -1, -1}}; pixel_result = pixel_grab(image, w, h); int pix_tempLow[][] = new int[h][w]; pix_tempLow = OneD_ArrayToTwoD_Array(w, h, pixel_result); pix_tempLow = MaskOperation(w, h, pix_tempLow, mask); int pix_temp1D[] = new int[(w) * (h)]; pix_temp1D = TwoD_ArrayToOneD_Array(w, h, pix_tempLow); pix_temp1D = saturate(pix_temp1D, w - 2, h - 2); pix_temp1D = restrict(pix_temp1D); pix_temp1D = pix_pack(pix_temp1D, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_temp1D); } /** *************************** High Boost Filter **************** */ if (e.getSource() == mhighBoost) { int mask[][] = {{-1, -1, -1}, {-1, 9, -1}, {-1, -1, -1}}; pixel_result = pixel_grab(image, w, h); int pix_tempLow[][] = new int[h][w]; pix_tempLow = OneD_ArrayToTwoD_Array(w, h, pixel_result); pix_tempLow = MaskOperation(w, h, pix_tempLow, mask); int pix_temp1D[] = new int[(w) * (h)]; pix_temp1D = TwoD_ArrayToOneD_Array(w, h, pix_tempLow); pix_temp1D = saturate(pix_temp1D, w - 2, h - 2); pix_temp1D = restrict(pix_temp1D); pix_temp1D = pix_pack(pix_temp1D, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_temp1D); } if (e.getSource() == m_Save) { for (int i = 0; i < w * h; i++) { System.out.println(pixel_result[i]); } FileImageOutputStream src_img; int returnVal = jfc.showSaveDialog(IPToolKit.this); if (returnVal == JFileChooser.APPROVE_OPTION) { File fileR = jfc.getSelectedFile(); String fileToSave = file.getAbsolutePath(); if (!fileToSave.toLowerCase().endsWith(".jpg")) { fileR = new File(fileToSave + ".jpg"); } try { src_img = new FileImageOutputStream(fileR); buf_img = getImageFromArray(pixel_result, w, h); ImageIO.write(buf_img, "jpg", src_img); } catch (IOException ex8) { System.out.println(ex8); } } } /** ********************* Invert and image ************ */ if (e.getSource() == mInvert) { Image img_Invert = image; pixel_result = new int[w * h]; pixel_result = pixel_grab(img_Invert, w, h); for (int r = 0; r < w * h; r++) { pixel_result[r] = 255 - pixel_result[r]; } // pixel_div = saturate(pixel_div,w,h); pixel_result = pix_pack(pixel_result, w, h); imageResultDisplay(w, h, pixel_result); } /** *************************** Median Filter **************** */ if (arg.equals("Median")) { int[] pix_grabed = new int[w * h]; int[][] p2d = new int[h][w]; int[][] pp2d = new int[h][w]; int pix_pcked[] = new int[w * h]; int pres[] = new int[h * w]; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = median_filter(p2d); pres = TwoD_ArrayToOneD_Array(w, h, pp2d); pix_pcked = pix_pack(pres, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_pcked); } /** ********************** Prewits Horizontal Edge Detection ******************* */ if (arg.equals("Prewits Horizontal")) { int[] pix_grabed = new int[w * h]; int[][] p2d = new int[h][w]; int[][] pp2d = new int[h][w]; int pix_pcked[] = new int[w * h]; int pres[] = new int[h * w]; int mask[][] = {{-1, -1, -1}, {0, 0, 0}, {1, 1, 1}}; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = MaskOperation(w, h, p2d, mask); pres = TwoD_ArrayToOneD_Array(w, h, pp2d); pres = saturate(pres, w - 2, h - 2); pres = restrict(pres); pix_pcked = pix_pack(pres, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_pcked); } /** ********************** Prewits Vertical Edge Detection ******************* */ if (arg.equals("Prewits Vertical")) { int[] pix_grabed = new int[w * h]; int[][] p2d = new int[h][w]; int[][] pp2d = new int[h][w]; int pix_pcked[] = new int[w * h]; int pres[] = new int[h * w]; int mask[][] = {{-1, 0, 1}, {-1, 0, 1}, {-1, 0, 1}}; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = MaskOperation(w, h, p2d, mask); pres = TwoD_ArrayToOneD_Array(w, h, pp2d); pres = saturate(pres, w - 2, h - 2); pres = restrict(pres); pix_pcked = pix_pack(pres, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_pcked); } /** ********************** Prewits Edge Detection ******************* */ if (arg.equals("Prewits Both")) { int[] pix_grabed = new int[w * h]; int[][] p2d = new int[h][w]; int[][] pp2d = new int[h][w]; int pix_pcked[] = new int[w * h]; int pres1[] = new int[h * w]; int pres2[] = new int[h * w]; int pres[] = new int[h * w]; int mask1[][] = {{-1, -1, -1}, {0, 0, 0}, {1, 1, 1}}; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = MaskOperation(w, h, p2d, mask1); pres1 = TwoD_ArrayToOneD_Array(w, h, pp2d); pres1 = saturate(pres1, w - 2, h - 2); pres1 = restrict(pres1); int mask2[][] = {{-1, 0, 1}, {-1, 0, 1}, {-1, 0, 1}}; p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = MaskOperation(w, h, p2d, mask2); pres2 = TwoD_ArrayToOneD_Array(w, h, pp2d); pres2 = saturate(pres2, w - 2, h - 2); pres2 = restrict(pres2); for (int i = 0; i < ((h - 2) * (w - 2)); i++) { pres[i] = pres1[i] + pres2[i]; } pix_pcked = pix_pack(pres, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_pcked); } /** ********************** Sobel Horizontal Edge Detection ******************* */ if (arg.equals("Sobel Horizontal")) { int[] pix_grabed = new int[w * h]; int[][] p2d = new int[h][w]; int[][] pp2d = new int[h][w]; int pix_pcked[] = new int[w * h]; int pres[] = new int[h * w]; int mask[][] = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}}; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = MaskOperation(w, h, p2d, mask); pres = TwoD_ArrayToOneD_Array(w, h, pp2d); pres = saturate(pres, w - 2, h - 2); pres = restrict(pres); pix_pcked = pix_pack(pres, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_pcked); } /** ********************** Sobel Vertical Edge Detection ******************* */ if (arg.equals("Sobel Vertical")) { int[] pix_grabed = new int[w * h]; int[][] p2d = new int[h][w]; int[][] pp2d = new int[h][w]; int pix_pcked[] = new int[w * h]; int pres[] = new int[h * w]; int mask[][] = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}}; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = MaskOperation(w, h, p2d, mask); pres = TwoD_ArrayToOneD_Array(w, h, pp2d); pres = saturate(pres, w - 2, h - 2); pres = restrict(pres); pix_pcked = pix_pack(pres, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_pcked); } /** ********************** Sobel Edge Detection ******************* */ if (arg.equals("Sobel Both")) { int[] pix_grabed = new int[w * h]; int[][] p2d = new int[h][w]; int[][] pp2d = new int[h][w]; int pix_pcked[] = new int[w * h]; int pres1[] = new int[h * w]; int pres2[] = new int[h * w]; int pres[] = new int[h * w]; int mask1[][] = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}}; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = MaskOperation(w, h, p2d, mask1); pres1 = TwoD_ArrayToOneD_Array(w, h, pp2d); pres1 = saturate(pres1, w - 2, h - 2); pres1 = restrict(pres1); int mask2[][] = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}}; p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = MaskOperation(w, h, p2d, mask2); pres2 = TwoD_ArrayToOneD_Array(w, h, pp2d); pres2 = saturate(pres2, w - 2, h - 2); pres2 = restrict(pres2); for (int i = 0; i < ((h - 2) * (w - 2)); i++) { pres[i] = pres1[i] + pres2[i]; } pix_pcked = pix_pack(pres, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_pcked); } /** ********************** Roberts Edge Detection ******************* */ if (arg.equals("Roberts")) { int[] pix_grabed = new int[w * h]; int[][] p2d = new int[h][w]; int[][] pp2d = new int[h][w]; int pix_pcked[] = new int[w * h]; int pres[] = new int[h * w]; int mask[][] = {{1, 0}, {0, -1}}; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); for (int i = 1; i < h - 1; i++) { for (int j = 1; j < w - 1; j++) { pp2d[i][j] = ((mask[0][0] * p2d[i - 1][j - 1] + mask[1][0] * p2d[i + 1][j - 1]) + (mask[0][1] * p2d[i - 1][j + 1] + mask[1][1] * p2d[i + 1][j + 1])) / 2; } } pres = TwoD_ArrayToOneD_Array(w, h, pp2d); pres = saturate(pres, w - 2, h - 2); pix_pcked = pix_pack(pres, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_pcked); } /** ********************** Mean Filter ******************* */ if (arg.equals("Mean")) { int[] pix_grabed = new int[w * h]; int[][] p2d = new int[h][w]; int[][] pp2d = new int[h][w]; int pix_pcked[] = new int[w * h]; int pres[] = new int[h * w]; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = mean_filt(p2d); pres = TwoD_ArrayToOneD_Array(w, h, pp2d); pix_pcked = pix_pack(pres, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_pcked); } /** ********************** Laplacian Edge Detector ******************* */ if (arg.equals("Laplacian")) { int[] pix_grabed = new int[w * h]; int[][] p2d = new int[h][w]; int[][] pp2d = new int[h][w]; int pix_pcked[] = new int[w * h]; int pres[] = new int[h * w]; int mask[][] = {{0, -2, 0}, {-2, 8, -2}, {0, -2, 0}}; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); pp2d = MaskOperation(w, h, p2d, mask); pres = TwoD_ArrayToOneD_Array(w, h, pp2d); pres = saturate(pres, w - 2, h - 2); pres = restrict(pres); pix_pcked = pix_pack(pres, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pix_pcked); } /** ********************** Histogram Equalization ******************* */ if (arg.equals("Histogram Equalization")) { int[] pix_grabed = new int[h * w]; int pres[] = new int[h * w]; int cnt_pix[] = new int[256]; int pixx[] = new int[h * w]; int pix_pcked[] = new int[h * w]; int pix_res[] = new int[h * w]; int len = h * w; int res = 0; pix_grabed = pixel_grab(image, w, h); for (int i = 0; i < h * w; i++) { pixx[i] = pix_grabed[i]; } for (int i = 0; i < 256; i++) { cnt_pix[i] = 0; } for (int i = 0; i < len; i++) { int ind = pixx[i]; cnt_pix[ind]++; } for (int i = 0; i < w * h; i++) { float a = 0; for (int j = 0; j < (pixx[i] + 1); j++) { float b = (float) cnt_pix[j]; float c = (float) (h * w); a = a + (b / c); } res = (int) (a * 255); if (res > 255) res = 255; pix_res[i] = (0xff000000 | (res << 16) | (res << 8) | res); } pix_pcked = pix_pack(pix_res, w, h); imageResultDisplay(w, h, pix_pcked); } if (arg.equals("Connected Component")) { int pix_grabed[] = new int[h * w]; int p2d[][] = new int[h][w]; conect_input = new int[h][w]; conect_output = new int[h][w]; int x1 = x_cor; int y1 = y_cor; pix_grabed = pixel_grab(image, w, h); p2d = OneD_ArrayToTwoD_Array(w, h, pix_grabed); s = 0; t = 0; obj_size = 0; intensity = p2d[y1][x1]; for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { conect_input[i][j] = p2d[i][j]; conect_output[i][j] = 0; } } connect(y1, x1); int pixx[] = new int[h * w]; int pp[] = new int[h * w]; pixx = TwoD_ArrayToOneD_Array(w, h, conect_output); pixx = saturate(pixx, w - 2, h - 2); pp = pix_pack(pixx, w - 2, h - 2); imageResultDisplay(w - 2, h - 2, pp); } /** ********************** Blending ******************* */ if (arg.equals("Blending")) { int size; int hei, wid; if (h1 > h) hei = h1; else hei = h; if (w1 > w) wid = w1; else wid = w; size = hei * wid; int pix_img1[] = new int[size]; int pix_img2[] = new int[size]; int pix_res[] = new int[size]; int pixx[] = new int[h1 * w1]; double x = 0.5; pix_img1 = pixel_grab(image, w, h); OpenImage2(); pix_img2 = pixel_grab(image1, w1, h1); // grayImageDisplay(w1,h1,pixx) for (int i = 0; i < size; i++) { pix_res[i] = (int) ((x * pix_img1[i]) + ((1 - x) * (pix_img2[i]))); } int pix_pcked[] = new int[size]; pix_pcked = pix_pack(pix_res, wid, hei); imageResultDisplay(wid, hei, pix_pcked); } /** ****************** Quit OR Exit **************** */ if (arg.equals("Exit")) { System.exit(0); } }