1.Blob là gì ?
Blob là những điểm nhỏ, nhóm điểm. Hãy tưởng tượng một tờ giấy trắng bị vẩy mực lên, thì khi đó mỗi vết mực tạo thành một blob.
2. Cách sử dụng Blob Detection với opencv:
– Blob detection giúp tìm ra các điểm, đốm (blob ) trên ảnh.
Cách cài đặt trên C++ :
using namespace cv;
// Read image
Mat im = imread( “blob.jpg”, IMREAD_GRAYSCALE );
// Set up the detector with default parameters.
SimpleBlobDetector detector;
// Detect blobs.
std::vector<KeyPoint> keypoints;
detector.detect( im, keypoints);
// Draw detected blobs as red circles.
// DrawMatchesFlags::DRAW_RICH_KEYPOINTS flag ensures the size of the circle corresponds to the size of blob
Mat im_with_keypoints;
drawKeypoints( im, keypoints, im_with_keypoints, Scalar(0,0,255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS );
// Show blobs
imshow(“keypoints”, im_with_keypoints );
waitKey(0);
3.Tìm các blob dựa theo màu sắc, kích thước, hình dạng.
Thiết lập các thông số cho SimpleBlobDetector có thể giúp ta lọc những blob theo như chúng ta mong muốn.
Thiết lập thông số cho SimpleBlobDetector:
SimpleBlobDetector::Params params;
Lọc theo ngưỡng:
// thiết lập min, max cho ngưỡng
params.minThreshold = 10;
params.maxThreshold = 200;
Lọc theo kích thước:
params.filterByArea = true;
params.minArea = 1500;
params.maxArea = 5000;
Lọc theo độ tròn của hình(circularity):
params.filterByCircularity = true;
params.minCircularity = 0.1;
circularity được tính theo công thức : (4 x pi x diện tích) / (chu vi)^2.
0 < circulary < 1.
Có thể thấy những hình càng gần với hình tròn thì có circulary càng gần với 1.
Lọc theo độ lồi lõm của hình (convexity):
params.filterByConvexity = true;
params.minConvexity = 0.87;
convexity được tính bằng (diện tích của blob) / (diện tích của cả vùng lồi)
0 < convexity < 1.
Lọc theo Inertia Ratio:
params.filterByInertia = True
params.minInertiaRatio = 0.1
Inertia Ratio như là độ kéo dài của một hình. Hình tròn có Inertia Ratio = 1, elip có 0< Inertia Ratio< 1 và đường thẳng có Inertia Ratio = 0.