%% 背景相减
%
% level=graythresh (Bt);
% bw = im2bw (Bt,level) ;
% figure,imshow (bw)
%
% BG = imopen (bw, strel ('disk',15));
% I2 = imsubtract (bw,BG);
%
% figure,imshow (I2 );
%%
% I= imread ( '0037.jpg' );
% figure,imshow(I);
% bt=rgb2gray(I);
% figure,imshow(bt);
%% 自适应滤波
x=imread('10.jpg');%需要过滤的图像
n=3; %模板大小
[height, width]=size(x); %获取图像的尺寸(n小于图片的宽高)
figure;imshow(x);%显示原图
% x = padarray(x,[3,3]); %对图像边缘进行填充
x = imnoise(x,'salt & pepper'); %加入椒盐噪声
figure;
imshow(x); %显示加入噪声后的图片
x1=double(x); %数据类型转换
x2=x1; %转换后的数据赋给x2
for i=1:height-n+1
for j=1:width-n+1
c=x1(i:i+(n-1),j:j+(n-1)); %在x1中从头取模板大小的块赋给c
e=c(1,:); %e中存放是c矩阵的第一行
for u=2:n %将c中的其他行元素取出来接在e后使e为一个行矩阵
e=[e,c(u,:)];
end
med=median(e); %取一行的中值
x2(i+(n-1)/2,j+(n-1)/2)=med; %将模板各元素的中值赋给模板中心位置的元素
end
end
d=uint8(x2); %未被赋值的元素取原值
figure;
imshow(d); %显示过滤图片
x0=rgb2gray(x); %灰度处理,灰度处理后的图像是二维矩阵
b=medfilt2(x0,[n,n]); %matlab中自带值滤波函数
figure,imshow(b); %显示过滤后的灰度图片
%% Prewitt算子 锐化处理
I1=b; %将彩色图变成灰色图
figure;
imshow(I1),title('原图');
model=[-1,0,1;
-1,0,1;
-1,0,1];
[m,n]=size(I1);
I2=I1;
for i=2:m-1
for j=2:n-1
tem=I1(i-1:i+1,j-1:j+1);
tem=double(tem).*model;
I2(i,j)=sum(sum(tem));
end
end
figure,
imshow(uint8(I2)),title('边缘提取后的图像');
I2=I2+I1;
figure,
imshow(I2),title('图像锐化')
%% 滤波窗口选择展示
rawimg = imread('10.jpg');
[~,~,index] = size(rawimg);
if index ~= 1
rawimg = rgb2gray(rawimg); % 转化为灰度图
end
% 添加噪声
salt_img=imnoise(rawimg,'salt & pepper',0.04); % 叠加密度为0.04的椒盐噪声
figure;;imshow(rawimg);title('原图');
figure;imshow(salt_img);title('添加椒盐噪声');
% 进行滤波
% after = medfilt2(salt_img,[3 3]); % 采用二维中值滤波函数对图像滤波,滤波窗口是3*3
after = medfilt2(salt_img,[7,7]); % 滤除高斯噪声
% 滤波效果:
% figure;subplot(1,2,1);imshow(after);title('3*3滤波窗口效果');
figure;imshow(after);title('7*7滤波窗口效果');
%% 中值滤波
% J=imnoise(b,'salt & pepper');
% after=midfilt(J,3);
% figure,imshow(J);
% figure,imshow(after);
%% 均值滤波
% G=imnoise(after,'gaussian');
% after2=avefilt(G,3);
% % figure,imshow(I);
% % figure,imshow(G);
% figure,imshow(after2);
%% 二值化
%% 去除过小的目标
Irem = bwareaopen(bw,20);
figure,imshow(Irem),title('去除小目标后的图像');
%% 填充
Bw_img1=imfill(Irem,'holes');
figure,imshow( Bw_img1),title('孔洞填充后的图像');
%% 开运算
% SE=strel('disk',1);
SG=strel('square',2);
% A=imopen(bw,SE);
D=imopen(Bw_img1,SG);
% figure,imshow(A);
figure,imshow(D),title('开运算后的图像');
%% 边缘检测
% J1=edge(D,'Sobel');
% J2=edge(D,'prewitt');
% J3=edge(D,'Roberts')%舍
J4=edge(D,'log');
% figure,imshow(J1);
% figure,imshow(J2);
% figure,imshow(J3);
figure,imshow(J4);
%% 边界检测
[B,L] = bwboundaries(J4);
figure,imshow(J4);
hold on;
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2),boundary(:,1),'g','LineWidth',2);
end
%
% [B,L] = bwboundaries(J4);
% figure,imshow(J4);
% hold on;
% for k = 1:length(B)
% boundary = B{k};
% plot(boundary(:,2),boundary(:,1),'g','LineWidth',2);
% end
%% belabel标记
[L,N] = bwlabel(J4);
img_rgb = label2rgb(L,'hsv',[.5 .5 .5],'shuffle');
figure,imshow(img_rgb);hold on
for k =1:length(B)
boundary = B{k};
plot(boundary(:,2),boundary(:,1),'w','LineWidth',2);
text(boundary(1,2)-11,boundary(1,1)+11,num2str(k),'Color','y','Fontsize',14,'FontWeight','bold');
end
%% 特征表达
stats = regionprops(L,after,'Area','EquivDiameter','Perimeter','MaxIntensity','MeanIntensity','MinIntensity');%统计的数保留在stats内
% temp = zeros(1,N);
% for k = 1:N
% %计算thinness ratio(细度比例)
% temp(k) = 4 * pi * stats(k,1).Area / (stats(k,1).Perimeter)^2;
% stats(k,1).ThinnessRatio = temp(k);
% %计算aspect ratio长宽比
% temp(k) = (stats(k,1).BoundingBox(3))/(stats(k,1).BoundingBox(4));
% stats(k,1).AspectRatio = temp(k);
% end
%
% csvwrite('stats.csv',stats)
%%
% clear all
% image = imread( '111.png' );%彩色图像
% eIm = CenterDiffEdge( image );
% figure; imshow( uint8(eIm) );
% % image = imread( 'lena.bmp' );%灰度图像
% % eIm = CenterDiffEdge( image );
% % figure; imshow( uint8(eIm) );
a=imread('111.png');
b=imbinarize(a,'adaptive');
c=imbinarize(a);
d=imbinarize(a,0.5);
imshow(d);
11-21
450
01-29
5963