要把鱼从图像中分割开来,观察其颜色特征,其R分量明显区别于其他方法,因此可以先对图上每个像素点进行判断,在通过蒙版的方法获得目标的分割
%author foddcusL FAFU 2022.3 [email protected]
%参数介绍
%Xsize、Ysize 生产图像或目标图像的大小,其中X为列
%aimP:目标图像,加上后缀序号表示不同的图像
%numMax\Min 设定的参数,对应灰度图属性所能达到的最值
clear all
aimP1=imread("D:\同步空间\算法汇总\DIPUM2E_Original_Book_Images\DIPUM2E_Original_Book_Images\DIPUM2E_International_Ed_CH02_Images\Fig0208(a).tif");
[ysize,xsize]=size(aimP1);
thresholdmin=30;
thresholdmax=60;
for i=1:xsize
for j=1:ysize
if aimP1(j,i)<=thresholdmax && aimP1(j,i)>=thresholdmin
aimP(j,i)=aimP1(j,i);
else
aimP(j,i)=255-aimP1(j,i);
end
end
end
aimP2=imread('D:\同步空间\算法汇总\studyformatlab\Images\Images\qw.JPG');
%观察颜色的直方图分布
R=aimP2(:,:,1);
G=aimP2(:,:,2);
B=aimP2(:,:,3);
figure
subplot(3,2,1);
imshow(R);
subplot(3,2,2);
imhist(R);
subplot(3,2,3);
imshow(G);
subplot(3,2,4);
imhist(G);
subplot(3,2,5);
imshow(B);
subplot(3,2,6);
imhist(B);
%方法一,使用灰度切片的蒙版的方法
[ysize,xsize,det]=size(aimP2);
mask=ones(ysize,xsize);
for i=1:xsize
for j=1:ysize
if G(j,i)>=25 && R(j,i)<220%这里判断红色是为了避免把鱼的白色去掉
mask(j,i)=0;
end
end
end
mask=im2uint8(mask);
mask=mask/255;
for i=4:xsize-4%用区域蒙版的量做判断消除杂点
for j=4:ysize-4
if sum(sum(R(j-3:j+3,i-3:i+3)))>36*150&&sum(sum(G(j-3:j+3,i-3:i+3)))<36*50;
mask(j,i)=1;
end
if sum(sum(mask(j-3:j+3,i-3:i+3)))<10;
mask(j,i)=0;
end
end
end
for i=1:3
aimP4(:,:,i)=aimP2(:,:,i).*mask;
end
%方法2:使用灰度整合二值化方法
for i=1:xsize
for j=1:ysize
aimP5(j,i)=(1*R(j,i)-0.3*G(j,i)-0.25*B(j,i));
end
end
%二值化
thresh=graythresh(aimP5);%确定二值化阈值
aimP6=im2bw(aimP5,thresh);
aimP6_1=aimP6;
aimP6=im2uint8(aimP6)/255;
for k=1:3
for i=1:xsize
for j=1:ysize
aimP7(j,i,k)=aimP2(j,i,k).*aimP6(j,i);
end
end
end
%%
k=-100;
%显示结果环节
figure
subplot(3,2,1),imshow(aimP1);
text(k,k,'oringin');
subplot(3,2,2),imshow(aimP);
text(k,k,'aim');
subplot(3,2,3),imshow(aimP2);
text(k,k,'origin');
subplot(3,2,4),imshow(aimP4);
text(k,k,'方法1');
subplot(3,2,5),imshow(aimP6_1);
text(k,k,'处理后的二极化图像');
subplot(3,2,6),imshow(aimP7);
text(k,k,'方法2');
% subplot(2,4,7),imshow(aimP7,[0,numPMax_2]);
% text(k,k,'A Mode ');
% subplot(2,4,8),imshow(aimP8,[0,numPMax_3]);%
% text(k,k,'B Mode ');