Отслеживание и маркировка коронарных артерий на изображениях ангиограмм - PullRequest
0 голосов
/ 29 февраля 2020

Я хочу отслеживать изображения ангиограмм для обозначения сети артерий. Есть основополагающие изображения правды. Как это сделать при обработке изображений в Opencv и C ++? Я использовал технику отображения объектов, но не смог получить ожидаемый результат.

Два изображения, которые я использовал, были помечены изображением истинной земли и другим изображением той же формы. это работает для того же изображения. но не для другого изображения.

Mat im1Gray, im2Gray;

cvtColor(im1, im1Gray, CV_BGR2GRAY);

cvtColor(im2, im2Gray, CV_BGR2GRAY);

std::vector<KeyPoint> keypoints1, keypoints2;

Mat descriptors1, descriptors2;

Ptr<Feature2D> orb = ORB::create(MAX_FEATURES);

orb->detectAndCompute(im1Gray, Mat(), keypoints1, descriptors1);

orb->detectAndCompute(im2Gray, Mat(), keypoints2, descriptors2);


std::vector<DMatch> matches;
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce-Hamming");
matcher->match(descriptors1, descriptors2, matches, Mat());

// Sort matches by score
std::sort(matches.begin(), matches.end());

// Remove not so good matches
const int numGoodMatches = matches.size() * GOOD_MATCH_PERCENT;
matches.erase(matches.begin() + numGoodMatches, matches.end());


// Draw top matches
Mat imMatches;
drawMatches(im1, keypoints1, im2, keypoints2, matches, imMatches);
imshow("Matches", imMatches);

std::vector<Point2f> points1, points2;

for (size_t i = 0; i < matches.size(); i++)
{
    points1.push_back(keypoints1[matches[i].queryIdx].pt);
    points2.push_back(keypoints2[matches[i].trainIdx].pt);
}

h = findHomography(points1, points2, LMEDS);

warpPerspective (im1, im1Reg, h, im2.size ());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...