74 while (availableBlobs.size () > 0)
76 BlobPtr b = availableBlobs.back ();
77 availableBlobs.pop_back ();
83 iterator endIdx = end ();
84 for (idx2 = begin (); idx2 != endIdx; ++idx2)
98 if (availableBlobs.size () > 0)
100 blob = availableBlobs.back ();
101 blob->InitialzieAsNew (nextBlobId);
102 availableBlobs.pop_back ();
106 blob =
new Blob (nextBlobId);
133 BlobPtr blobToMerge = idx->second;
141 for (row = blobToMerge
->rowTop; row <= rowBot; row++)
143 for (col = blobToMerge
->colLeft; col <= colRight; col++)
145 if (blobIds[row][col] == blobId)
146 blobIds[row][col] = newId;
150 blob->rowTop = Min (blob->rowTop, blobToMerge->rowTop);
151 blob->rowBot = Max (blob->rowBot, blobToMerge->rowBot);
152 blob->colLeft = Min (blob->colLeft, blobToMerge->colLeft);
153 blob->colRight = Max (blob->colRight, blobToMerge->colRight);
157 availableBlobs.push_back (blobToMerge);
170 idx = find (blob2Id);
175 if ((blob1Id == blob2Id) || (blob1 == blob2))
203 for (row = srcBlob
->rowTop; row <= rowBot; ++row)
205 for (col = srcBlob
->colLeft; col <= colRight; ++col)
207 if (blobIds[row][col] == srcBlobId)
208 blobIds[row][col] = destBlobId;
212 destBlob->rowTop = Min (destBlob->rowTop, srcBlob->rowTop);
213 destBlob->rowBot = Max (destBlob->rowBot, srcBlob->rowBot);
214 destBlob->colLeft = Min (destBlob->colLeft, srcBlob->colLeft);
215 destBlob->colRight = Max (destBlob->colRight, srcBlob->colRight);
218 idx = find (srcBlobId);
222 availableBlobs.push_back (srcBlob);
237 const_iterator endIdx = end ();
239 for (idx = begin (); idx != endIdx; ++idx)
241 tempBlob = idx->second;
260 const_iterator endIdx = end ();
262 for (idx = begin (); idx != endIdx; ++idx)
264 tempBlob = idx->second;
266 if (size > largestSize)
282 insert (BlobIndexPair (blob->Id (), blob));
289 insert (BlobIndexPair (blob->Id (), blob));
BlobPtr LocateMostComplete()
Locates the blob that covers the greatest part of the raster; that is the one who has the largest (He...
Used by the Raster object to identify a distinct blob; where it is in the raster and its unique id...
kkint32 Width()
Number of columns that this blob occupies.
BlobPtr NewBlob(kkuint32 rowTop, kkuint32 colLeft)
unsigned __int32 kkuint32
kkint32 Height()
Number of rows that the blob occupies.
void PushOnBack(BlobPtr blob)
void MergeBlobIds(BlobPtr blob, kkint32 blobId, kkint32 **blobIds)
Used by the Connected component analysis to merge two blobs together.
Maintains a list of blobs.
BlobPtr LocateLargestBlob()
Will return Blob with largest pixel count.
kkint32 PixelCount()
Number of pixels that are part of this blob.
BlobPtr LookUpByBlobId(kkint32 blobId)
Will return pointer to blob with 'blobId'; if not found will return NULL.
kkint32 Id()
The unique ID assigned to this blob.
void InitialzieAsNew(kkint32 _id)
BlobPtr MergeIntoSingleBlob(BlobPtr blob1, kkint32 blob2Id, kkint32 **blobIds)
void PushOnFront(BlobPtr blob)