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

26 vues (au cours des 30 derniers jours)
翔
le 19 Jan 2023
Commenté : le 21 Jan 2023
二値化された画像から特定の物体を検出したいです。(夜間撮影された水面の画像から、ペットボトル(画像内右上に存在)を特定する。)しかし、光の反射も同時に検出してしまいます。この光の反射部分を取り除く方法はありますでしょうか。また、個々の白領域のピクセル数が一定以上の場合に除去する関数(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);

Réponse acceptée

Hiro Yoshino
Hiro Yoshino le 20 Jan 2023
こんな感じでどうでしょうか?
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 commentaire
翔
le 21 Jan 2023
ありがとうございました!

Connectez-vous pour commenter.

Plus de réponses (1)

Shunichi Kusano
Shunichi Kusano le 20 Jan 2023
私からはこれだけ。
>個々の白領域のピクセル数が一定以上の場合に除去する関数(bwareaopenの逆)はありますか?
bwareafilt関数が使えます。範囲指定ができます。
  1 commentaire
翔
le 21 Jan 2023
便利そうです。ありがとうございます。

Connectez-vous pour commenter.

Catégories

En savoir plus sur Image Processing Toolbox dans Help Center et File Exchange

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!