Hi all
Is it possible to get the boundary central more dense region - ignoring the blobs on the side

6 件のコメント

DGM
DGM 2021 年 7 月 3 日
You might want to describe the method you're currently using.
Image Analyst
Image Analyst 2021 年 7 月 3 日
What does this thing represent? What is the real world object you images to get this? Is the real object known to be a rectangle or cylinder, with straight sides, or does it have ragged sides?
Conor O'Keeffe
Conor O'Keeffe 2021 年 7 月 4 日
Sorry yeah, the original image is attaced. I want to get the outline of the metal strut.
Basically getting to this point by thresholding.
Its an old image Im going back to so wasent thinking about getting a good contrast.
Image Analyst
Image Analyst 2021 年 7 月 4 日
@Conor O'Keeffe, after seeing your original gray scale image, I think Matt's solution is the one you should use and Accept.
DGM
DGM 2021 年 7 月 4 日
I think I'd agree with that.
Conor O'Keeffe
Conor O'Keeffe 2021 年 7 月 4 日
Yes thats great, thank you all for the help. Seems to be matching to the greyscale image (attached)

サインインしてコメントする。

 採用された回答

Matt J
Matt J 2021 年 7 月 3 日
編集済み: Matt J 2021 年 7 月 3 日

1 投票

Perhaps as follows,
BW0=load('Image.mat').BW;
BW= imclose(BW0,strel('disk',3));
BW = imfill( BW ,'holes') ;
BW=bwareafilt( BW,1);
boundary=fliplr( cell2mat( bwboundaries( BW ) ) );
imshow(insertMarker(double(BW0),boundary,'o','Size',1,'Color','m'));

その他の回答 (1 件)

DGM
DGM 2021 年 7 月 3 日
編集済み: DGM 2021 年 7 月 4 日

1 投票

I'll throw this out there. I'm assuming that the goal here is density-dependent (linear) mask constriction. On that assumption, I'm avoiding erosion and using an averaging filter and thresholding. It works, but it would likely require adjustment, considering I don't know what the particular limits are or what other images will look like.
% parameters
frad = 15;
masklevel = 0.1;
outlevel = 0.18;
% flattened, binarized image
inpict = rgb2gray(imread('capture.jpg'))>128;
% if you want to filter by local density, maybe use an avg filter
wpict = imfilter(double(inpict),fspecial('disk',frad));
% first pass to get rid of stray exterior points
mask = double(bwareafilt(wpict>masklevel,1));
wpict = wpict.*mask;
% second pass to tighten group following density
wpict = wpict>outlevel;
% as opposed to erosion which follows envelope
%wpict = imerode(wpict,strel('disk',10));
% for viewing, i'm just going to slap together a weighted mean
% you can use whatever you want. wpict is just a binary mask like any other.
k = 0.3;
comp = inpict*k + wpict*(1-k);
imshow(comp)

カテゴリ

ヘルプ センター および File ExchangeConvert Image Type についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by