二値化画像での大きいノイズの削除

二値化された画像から特定の物体を検出したいです。(夜間撮影された水面の画像から、ペットボトル(画像内右上に存在)を特定する。)しかし、光の反射も同時に検出してしまいます。この光の反射部分を取り除く方法はありますでしょうか。また、個々の白領域のピクセル数が一定以上の場合に除去する関数(bwareaopenの逆)はありますか?よろしくお願いします。
I = readimage("DSCF0009.JPG");
%トリミング
I_Trim = imcrop(I,[0 0 3072 1500]);
%しきい値のローカル関数
I2 = night_bi1(I_Trim);
%モルフォロジー演算で二値化領域の穴を埋める
SE = strel('disk',5);
BW1 = imopen(I2,SE);
%マスクの反転
BW2 = imcomplement(BW1);
%1000ピクセル以下の領域を削除
I_Binalized = bwareaopen(BW2,1000);
I_Binalized = imclearborder(I_Binalized,8);

 채택된 답변

Hiro Yoshino
Hiro Yoshino 2023년 1월 20일

0 개 추천

こんな感じでどうでしょうか?
I = imread("DSCF0009.JPG");
imshow(I)
%トリミング
I_Trim = imcrop(I,[0 0 3072 1500]);
imshow(I_Trim)
%しきい値のローカル関数
I2 = night_bi1(I_Trim);
imshow(I2)
%モルフォロジー演算で二値化領域の穴を埋める
SE = strel('disk',5);
BW1 = imopen(I2,SE);
%マスクの反転
BW2 = imcomplement(BW1);
%1000ピクセル以下の領域を削除
I_Binalized = bwareaopen(BW2,1000);
I_Binalized = imclearborder(I_Binalized,8);
imshow(I_Binalized)
% 追加部分
cc = bwconncomp(I_Binalized)
cc = struct with fields:
Connectivity: 8 ImageSize: [1500 3072] NumObjects: 4 PixelIdxList: {[1865×1 double] [1161×1 double] [1717×1 double] [2013×1 double]}
stats = regionprops(cc,"Area")
stats = 4×1 struct array with fields:
Area
idx = find([stats.Area] > 2000);
BW2 = ismember(labelmatrix(cc),idx);
imshow(BW2)

댓글 수: 1

翔
2023년 1월 21일
ありがとうございました!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Shunichi Kusano
Shunichi Kusano 2023년 1월 20일

0 개 추천

私からはこれだけ。
>個々の白領域のピクセル数が一定以上の場合に除去する関数(bwareaopenの逆)はありますか?
bwareafilt関数が使えます。範囲指定ができます。

댓글 수: 1

翔
2023년 1월 21일
便利そうです。ありがとうございます。

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 イメージのセグメンテーションと解析에 대해 자세히 알아보기

제품

릴리스

R2022b

질문:

翔
2023년 1월 19일

댓글:

翔
2023년 1월 21일

Community Treasure Hunt

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

Start Hunting!