Exemple #1
0
        public my_color[,] Linear_filter(ref my_color[,] the_image, ref float[,] the_mask, string _post_processing)
        {
            _image temp_image  = new _image();
            int    mask_width  = the_mask.GetLength(1);
            int    mask_height = the_mask.GetLength(0);

            temp_image.image_buffer = pad_image(ref the_image, mask_width, mask_height);
            //MessageBox.Show("Now Image is padded in the Memory , here it is");
            //display_image(temp_image.image_buffer);

            //padded and ready to be masked
            _image resulted_image = new _image();

            resulted_image.image_buffer = new my_color[the_image.GetLength(0), the_image.GetLength(1)];
            //Apply the choosed filter with the given mask

            int added_width  = (int)((the_image.GetLength(1) - 1) / 2);
            int added_height = (int)((the_image.GetLength(0) - 1) / 2);

            int    W = the_image.GetLength(1);
            int    H = the_image.GetLength(0);
            double red_sum, green_sum, blue_sum;
            int    Mask_width = the_image.GetLength(1);
            int    Mask_hight = the_image.GetLength(0);


            for (int i = 0; i < H; i++)
            {
                for (int j = 0; j < W; j++)
                {
                    red_sum   = 0;
                    green_sum = 0;
                    blue_sum  = 0;
                    int current_pixel_width  = j + added_width;
                    int current_pixel_height = i + added_height;

                    for (int current_height_of_pixel_padded = current_pixel_height - added_height, current_H_pixel_mask = 0; current_H_pixel_mask < mask_height; current_height_of_pixel_padded++, current_H_pixel_mask++)  /////current_height_of_pixel_padded < current_pixel_height + added_height
                    {
                        for (int current_width_of_pixel_padded = current_pixel_width - added_width, current_W_pixel_mask = 0; current_W_pixel_mask < mask_width; current_width_of_pixel_padded++, current_W_pixel_mask++)   ///// current_width_of_pixel_padded < current_pixel_width + added_width
                        {
                            red_sum   += (double)temp_image.image_buffer[current_height_of_pixel_padded, current_width_of_pixel_padded].Red * (double)the_mask[current_H_pixel_mask, current_W_pixel_mask];
                            green_sum += (double)temp_image.image_buffer[current_height_of_pixel_padded, current_width_of_pixel_padded].Green * (double)the_mask[current_H_pixel_mask, current_W_pixel_mask];
                            blue_sum  += (double)temp_image.image_buffer[current_height_of_pixel_padded, current_width_of_pixel_padded].Blue * (double)the_mask[current_H_pixel_mask, current_W_pixel_mask];
                        }
                    }

                    resulted_image.image_buffer[i, j].Red   = (int)red_sum;
                    resulted_image.image_buffer[i, j].Green = (int)green_sum;
                    resulted_image.image_buffer[i, j].Blue  = (int)blue_sum;
                }
            }

            //return resulted_image.image_buffer;
            return(Post_processing(resulted_image.image_buffer, _post_processing));
        }
Exemple #2
0
        public my_color[,] pad_image(ref my_color[,] image1, int mask_width, int mask_height)
        {
            padded_image = new _image();

            //Padding process : add borders to the image , new size then
            //needed variables
            int old_width, old_hight, new_width, new_hight, added_width_size, added_height_size;

            old_width = image1.GetLength(1);
            old_hight = image1.GetLength(0);



            new_width = old_width + mask_width - 1;
            new_hight = old_hight + mask_height - 1;

            padded_image.image_buffer = new my_color[(new_hight), (new_width)];

            added_width_size  = (int)((mask_width - 1) / 2);
            added_height_size = (int)((mask_height - 1) / 2);

            for (int i = 0; i < new_hight; i++)
            {
                for (int j = 0; j < new_width; j++)
                {
                    if (j < added_width_size || i < added_height_size)
                    {
                        padded_image.image_buffer[i, j].Red   = 0;
                        padded_image.image_buffer[i, j].Green = 0;
                        padded_image.image_buffer[i, j].Blue  = 0;
                    }
                    else if (j >= (old_width + added_width_size) || i >= (old_hight + added_height_size))
                    {
                        padded_image.image_buffer[i, j].Red   = 0;
                        padded_image.image_buffer[i, j].Green = 0;
                        padded_image.image_buffer[i, j].Blue  = 0;
                    }
                    else
                    {
                        padded_image.image_buffer[i, j].Red   = image1[(i - added_height_size), (j - added_width_size)].Red;
                        padded_image.image_buffer[i, j].Green = image1[(i - added_height_size), (j - added_width_size)].Green;
                        padded_image.image_buffer[i, j].Blue  = image1[(i - added_height_size), (j - added_width_size)].Blue;
                    }
                }
            }

            return(padded_image.image_buffer);
        }