Results 1 to 1 of 1
  1. #1
    meth is offline Member
    Join Date
    Jan 2011
    Posts
    11
    Rep Power
    0

    Default problem with combining RGB binary images

    hi. im doing an edge detection which will detect edges of each RGB channel and then combine them to show it as a final output. im now having a problem with combining the three as it doesnt show me a binary image, instead it has some colors on it. i have checked each binary image of the RGB and it works fine which gives the black and white image. to be clearer, following is the code:

    Java Code:
    private void processActionPerformed(java.awt.event.ActionEvent evt) {                                        
            width = inputimage.getWidth(null);
            height = inputimage.getHeight(null);
    
            inputbuff = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    
            Graphics r = inputbuff.getGraphics();
            r.drawImage(inputimage, 0, 0, null);
            r.dispose();
    
            process_red = new int[width * height];
            process_green = new int[width * height];
            process_blue = new int[width * height];
            process_grey = new int[width * height];
            process_rgb = new int[width * height];
            process_combine = new int[width * height];
    
            for (int i = 0; i < 256; i++) {
                freq_red[i] = freq_green[i] = freq_blue[i] = freq_grey[i] = 0;
            }
    
            for (int x = 0; x < width; x++) {
                for (int y = 0; y < height; y++) {
                    int clr = inputbuff.getRGB(y, x);
    
                    int red = (clr & 0x00ff0000) >> 16;
                    int green = (clr & 0x0000ff00) >> 8;
                    int blue = clr & 0x000000ff;
                    int grey = (11 * red + 16 * green + 5 * blue) / 32;
    
                    freq_red[red] += 1;
                    freq_green[green] += 1;
                    freq_blue[blue] += 1;
                    freq_grey[grey] += 1;
                }
            }
    
            int threshold = 150;
            for (int i = 0; i < 256; i++) {
                freq_red[i] = applyThreshold(threshold, freq_red[i]);
                freq_green[i] = applyThreshold(threshold, freq_green[i]);
                freq_blue[i] = applyThreshold(threshold, freq_blue[i]);
                freq_grey[i] = applyThreshold(threshold, freq_grey[i]);
            }
    
            for (int x = 0; x < width; x++) {
                for (int y = 0; y < height; y++) {
                    int clr = inputbuff.getRGB(y, x);
    
                    int red = (clr & 0x00ff0000) >> 16;
                    int green = (clr & 0x0000ff00) >> 8;
                    int blue = clr & 0x000000ff;
                    int grey = (11 * red + 16 * green + 5 * blue) / 32;
    
                    red = freq_red[red];
                    green = freq_green[green];
                    blue = freq_blue[blue];
                    grey = freq_grey[grey];
    
    
                    int alpha = 0xff000000;
                int combine = alpha | (red <<16) |(green <<8)|blue;
    
                    process_red[x * height + y] = (0xFF<<24)|(red<<16)|(red<<8)|red;
                    process_green[x * height + y] = (0xFF<<24)|(green<<16)|(green<<8)|green;
                    process_blue[x * height + y] = (0xFF<<24)|(blue<<16)|(blue<<8)|blue;
                    process_grey[x * height + y] = (0xFF<<24)|(grey<<16)|(grey<<8)|grey;
                    process_rgb[x * height + y] = clr;
                    process_combine[x * height + y] = combine;
    
                }
            }
    
            image_red = new JFrame().createImage(new MemoryImageSource(width, height, process_red, 0, width));
            image_green = new JFrame().createImage(new MemoryImageSource(width, height, process_green, 0, width));
            image_blue = new JFrame().createImage(new MemoryImageSource(width, height, process_blue, 0, width));
            image_grey = new JFrame().createImage(new MemoryImageSource(width, height, process_grey, 0, width));
            image_rgb = new JFrame().createImage(new MemoryImageSource(width, height, process_rgb, 0, width));
            image_combine = new JFrame().createImage(new MemoryImageSource(width, height, process_combine, 0, width));
    
            buff_red = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
            buff_green = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
            buff_blue = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
            buff_grey = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
            buff_rgb = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
            buff_combine = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
    
            graph_red = buff_red.getGraphics();
            graph_green = buff_green.getGraphics();
            graph_blue = buff_blue.getGraphics();
            graph_grey = buff_grey.getGraphics();
            graph_rgb = buff_rgb.getGraphics();
            graph_combine = buff_combine.getGraphics();
    
            graph_red.drawImage(image_red, 0, 0, null);
            graph_green.drawImage(image_green, 0, 0, null);
            graph_blue.drawImage(image_blue, 0, 0, null);
            graph_grey.drawImage(image_grey, 0, 0, null);
            graph_rgb.drawImage(image_rgb, 0, 0, null);
            graph_combine.drawImage(image_combine, 0, 0, null);
    
            graph_red.dispose();
            graph_green.dispose();
            graph_blue.dispose();
            graph_grey.dispose();
            graph_rgb.dispose();
            graph_combine.dispose();
    
    
            repaint();
    }
    this is the sample image:


    i suspected that the problem is with the alpha value:

    Java Code:
    int alpha = 0xff000000;
    int combine = alpha | (red <<16) | (green <<8)|blue;
    however, when i removed the alpha value it doesnt display anything. can anyone please help me? thanks in advance!
    Last edited by meth; 01-20-2011 at 12:59 PM. Reason: add sample image

Similar Threads

  1. Combining these 2 projects
    By fresh83 in forum New To Java
    Replies: 14
    Last Post: 12-28-2009, 08:52 AM
  2. combining two separate codes into one
    By jaiminparikh in forum Advanced Java
    Replies: 22
    Last Post: 02-18-2009, 05:35 PM
  3. convert binary to images
    By fiqueudrue in forum New To Java
    Replies: 3
    Last Post: 02-12-2009, 09:16 AM
  4. Help. Binary Search Problem
    By Krooger in forum Advanced Java
    Replies: 1
    Last Post: 11-03-2008, 06:19 AM
  5. Help combining loops into 1 program.
    By kewlgeye in forum New To Java
    Replies: 5
    Last Post: 04-22-2008, 09:58 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •