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

26 次查看(过去 30 天)
翔
2023-1-19
评论: 2023-1-21
二値化された画像から特定の物体を検出したいです。(夜間撮影された水面の画像から、ペットボトル(画像内右上に存在)を特定する。)しかし、光の反射も同時に検出してしまいます。この光の反射部分を取り除く方法はありますでしょうか。また、個々の白領域のピクセル数が一定以上の場合に除去する関数(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
こんな感じでどうでしょうか?
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
私からはこれだけ。
>個々の白領域のピクセル数が一定以上の場合に除去する関数(bwareaopenの逆)はありますか?
bwareafilt関数が使えます。範囲指定ができます。
  1 个评论
翔
2023-1-21
便利そうです。ありがとうございます。

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!