Запрос об обнаружении поврежденной / дублированной области на одном изображении

0

Недавно я проводил исследование о том, как обнаружить дублированный регион в изображении, используя OpenCV + eclipse в Ubuntu. Я также читаю ссылки на код SIFT, SURF, Feature2d + Homomorphy, но этот код - это просто сравнение между объект изображения и сцена изображения? Я не знаю, как объединить эти алгоритмы в изображение. Чтобы я мог использовать его для обнаружения дублированной области в изображении AN.

  • 0
    с SIFT / SURF вы попытаетесь найти второе лучшее соответствие для каждой функции на одном и том же изображении и сравнить его с лучшим соответствием, я полагаю.
Теги:
opencv

3 ответа

0
Лучший ответ

Проблема заключается в методе, с помощью которого вы устанавливаете рентабельность инвестиций. Вы используете cvSetImageROI() который используется для "IplImage", а не для изображений "Mat". А с другой стороны, вы загружаете изображение в формате Mat. Это причина этой ошибки.

Я написал код. Вы можете изменить код в соответствии с вашими потребностями. Код сохранит меньшие изображения в папке "less_images". Поэтому не забудьте создать новую папку с именем "small_images".

int main(  )
{
    Mat image;
    int width_step;
    int height_step;
    //image = imread( argv[1], CV_LOAD_IMAGE_COLOR);
    image = imread( "myImage.jpeg", CV_LOAD_IMAGE_COLOR);
    int rows = image.rows;
    int cols = image.cols;

    cv::Size s = image.size();
    rows = s.height;
    cols = s.width;
    cout<<"The width of the image: "<<cols<< endl;
    cout<<"The height of the image: "<<rows<< endl;

    cout<< "Input your width_step= ";
    cin>>width_step;
    cout<< "Input your height_step= ";
    cin>>height_step;
    double each_width= cols/width_step;
    double each_height= rows/height_step;
    cout<< "The width_size of each region "<<each_width<< endl;
    cout<< "The height_size of each region "<<each_height<< endl;
       //-------------------------  

    int i=0;

    for(int x=0; x<(cols - width_step); x++ )
    {       
        for (int y=0; y < (rows - height_step ); y++)
        {
            if( x <(cols - width_step) &&  y < (rows - height_step ) )
                {
                Mat smallerImage;

                smallerImage.create(height_step, width_step, CV_8UC3);
                Rect regionOfInterest = Rect (x, y, width_step, height_step); // Rect (min_x,min_y, cols, rows);
                //mySquare= original_frame(regionOfInterest);
                smallerImage = image( regionOfInterest );



                ///Increasing the value of "x" and "y" for next image for "Rect()"
                x = x + width_step;
                y = y + height_step;
                i = i+1;



                /// Saving the smaller image to a folder called "smaller_image"
                char name_writeImage[255];
                sprintf(name_writeImage, "smaller_images/%d.jpg" ,i );      
                imwrite(name_writeImage,smallerImage );
            }
        }   
    }       


    waitKey(0);
    return 0;
    }
  • 0
    Большое спасибо за вашу помощь. Код очень полезен для меня, я буду использовать его для обнаружения некоторых похожих ключевых характеристик каждого подизображения, используя алгоритм SIFT в одном большом изображении. Это первый раз, когда я знаком с openCV. Я люблю это, я постараюсь закончить это.
  • 0
    Пожалуйста, подтвердите мои другие ответы на этот вопрос, так как я не получил баллы за другие ответы.
Показать ещё 3 комментария
0

вы можете решить, сколько меньших изображений вы хотели бы разделить. Итак, скажем, вы хотите создать 4 меньших изображения с вашего изображения размером 400 x 400. Таким образом, каждое ваше изображение будет иметь размер 100 x 100.

Итак, теперь вам нужно создать 4 изображения.

Первое изображение: верхний левый угол (0,0), ширина = 400/4 = 100, высота = 400/4 = 100

            Mat image1;
            image1.create(height, width, CV_8UC3);
            Rect regionOfInterest_1 = Rect (0,0, width, height);
            image1= original_Image(regionOfInterest_1);

Второе изображение: верхний левый угол (0,101), ширина = 400/4 = 100, высота = 400/4 = 100

            Mat image2;
            image2.create(height, width, CV_8UC3);
            Rect regionOfInterest_2 = Rect (0,101, width, height);
            image2= original_Image(regionOfInterest_2);

Третье изображение: верхний левый угол (0,101), ширина = 400/4 = 100, высота = 400/4 = 100

            Mat image3;
            image3.create(height, width, CV_8UC3);
            Rect regionOfInterest_3 = Rect (101,0, width, height);
            image3= original_Image(regionOfInterest_3);

и так далее... вы можете сделать это, используя цикл for, вместо того, чтобы писать его отдельно. Но сначала вам нужно понять концепцию создания меньшего изображения из исходного изображения с помощью "Rect Region of interest".

Один совет: взгляните на аргументы Rect(x, y, width, height). В openCV X-координата представляет столбцы/ширину, а Y-координата представляет строки/высоту.

  • 0
    Огромное спасибо. Я постараюсь, и если у меня возникнут дополнительные вопросы. Я спрошу тебя. Можно мне твой адрес электронной почты? Потому что я новичок в этой области, и это мой проект. Я думаю, что мне нужно больше узнать об этом.
  • 0
    Что такое CV_8UC3?
Показать ещё 2 комментария
0

Я не знаю, каково ваше приложение, но вы можете определить какой-то небольшой регион интересов в своем образе... вы также можете создавать независимые изображения из этих регионов, а затем через рекурсивный цикл, который вы можете проверить, - это сходство между различными регионы.

Например: вы можете взглянуть на следующую иллюстрацию, где у нас больше изображение, а затем мы определяем несколько областей интересов (ROI), а затем создаем меньшие изображения из этих ROI, а затем мы можем найти сходство между этими меньшими изображениями (которые на самом деле являются частью исходного изображения) Изображение 174551

  • 0
    Хорошо, я знаю ваш ответ, но у меня есть вопрос о том, как разделить изображение на n-часть области интереса и размер каждой области интереса. Я думаю, что ваша карта не является гибкой с любым размером одного входного изображения. Пожалуйста, помогите мне об этой проблеме.
  • 0
    я объяснил это в отдельном ответе ... посмотрите на это

Ещё вопросы

Сообщество Overcoder
Наверх
Меню