开发者

From 4-connectivity to 8-connectivity in MATLAB

Say I have an boundary image in a logical matrix where true means boundary and false means region interior. The image encodes a tessellation of a 2D domain.

I was wondering if there is a compact way in MATLAB to "fix" those pixel neighborhoods where the separation between adjacent regions is o开发者_C百科nly 4-connected and transform them into 8-connected in a manner that preserves the topology of the tessellation.

I believe this can be done with LUTs, but I'm not sure how to proceed. Do I have to, and if so, how do I exactly evaluate all the 3x3 pixel regions where the connectivity is only 4-wise to fill-in the corresponding pixels?


My proposed solution: use BWHITMISS to find the pixels whose neighborhood is at least 4-connected, dilate the result with a rectangular-shaped structuring element to convert those neighborhoods to 8-connected, finally we combine with the original image using logical-OR.

Example:

bw = [
    0 0 0 1 0 1 0
    0 0 1 1 1 1 1
    0 1 1 1 0 1 0
    0 0 1 0 1 0 0
    0 1 1 0 0 0 0
    0 0 1 0 1 1 1
    0 0 1 0 0 1 0
];

hm = bwhitmiss(bw, [0 1 0; 1 1 1; 0 1 0]);   %# [-1 1 -1; 1 1 1; -1 1 -1]
bw2 = imdilate(hm,ones(3)) | bw;

We can visualize the result:

[r c] = find(hm);
subplot(121), imshow(bw), hold on, plot(c(:),r(:),'o')
subplot(122), imshow(bw2)

From 4-connectivity to 8-connectivity in MATLAB

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜