Bir havza görüntüsünden bölge bitişiklik matrisini hesaplamak için aşağıda yaptığımdan daha hızlı bir yol olup olmadığını öğrenmek istiyorum.(OpenCV) Su havzasından hızlı bitişik matris hesaplaması
Girdi: bu K bölgelerinin komşuluk matrisi: N.
çıkış 1'den etiketli N bölgeleri ile dönüm görüntüsü. İki bitişik olan ise
vector<Mat> masks;
for(int i = 0; i < N; i++)
{
// Create the corresponding mask
Mat mask;
compare(wshed, i+1, mask, CMP_EQ);
// Dilate to overlap the watershed line (border)
dilate(mask, mask, Mat());
// Add to the list of masks
masks.push_back(mask);
}
2. kontrol etmek için bir fonksiyon tanımlama: Her bir bölge için
1. karşılık gelen bir maske hesaplamak ve bir vektöre her maske koymak
bool areAdjacent(const Mat& mask1, const Mat& mask2)
{
// Get the overlapping area of the two masks
Mat m;
bitwise_and(mask1, mask2, m);
// Compute the size of the overlapping area
int size = countNonZero(m);
// If there are more than 10 (for example) overlapping pixels, then the two regions are adjacent
return (size > 10);
}
3. Eğer i-th bölgesi ve j-th bölgesi bitişikse, bitişiklik matrisi M: hesaplayın, sonra M [i] [j] = M [j] [i] = 1, diğer imkb onlar 0.
Mat M = Mat::zeros(N, N, CV_8U);
for(int i = 0; i < N-1; i++)
{
for(int j = i+1; j < N; j++)
{
if(areAdjacent(masks[i], masks[j]))
{
M.at<uchar>(i,j) = 1;
M.at<uchar>(j,i) = 1;
}
}
}
return M;