图像处理常用的代码 灰度、锐化处理、椒盐滤波等


%% 背景相减
% 
% 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);


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方sir点云学习经验分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值