⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zhongzhifil.m

📁 这是一个关于图象处理的matlab程序原代码
💻 M
字号:
clear;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%     读取原始图像
pic = imread('截短焊缝.bmp');
subplot(2,1,1);
imshow(uint8(pic));
title('原始图像');
%%%%%%%%%%%%%%%%%%%%%%%%%%
pic2=rgb2gray(pic); %将图像变为灰度图象 
subplot(2,1,2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  先进行滤波
M4=[0 1 0; 1 0 1; 0 1 0];
M4=M4/4;                       % 4邻域平均滤波
I_filter1=filter2(M4,pic2);
%%%%%%%%%%%%%%%%%%%%%%%%%
% M8=[1 1 1; 1 0 1; 1 1 1];      % 8邻域平均滤波
% M8=M8/8;
% I_filter1=filter2(M8,pic2);
%%%%%%%%%%%%%%%%%%%%%%%
% [I_filter1 noise]=wiener2(pic2, [5 5]);%wiener滤波
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  灰度增强
[Height,Width] = size(I_filter1);
% b=0;                              %用直方图进行处理
% p=0;
% for a=0:255
%     for i=1:Width
%         for j=1:Height
%             if I_filter1(j,i)==a
%                 b=b+1;
%                 I_filter2(j,i)=p;
%             end
%         end
%     end
%     p=b/(Height*Width);
% end

% a = 30;b = 0.9;c = 1.05;%%%%%%%%%%%%%%%%     对数法处理(还不行)
% for i = 1:Width
%     for j = 1:Height
%         I_filter2(j,i) = a+log(I_filter1(j,i) + 1)/b*log(c);
%     end
%     
% end

a = 30;b =2;c = 4;%%%%%%%%%%%%%%%%%%%%   指数法处理
for i = 1:Width
    for j = 1:Height
        I_filter2(j,i) = c*(I_filter1(j,i)+a)^b;
    end
    
end

I_max = max(max(I_filter2));  %%%%%%%%%%%%%%%%%%%%灰度的线性变换
I_min = min(min(I_filter2));
for i = 1:Width
    for j = 1:Height
        if I_filter2(j,i)>I_max
            I_filter3 = 255;
        elseif I_filter2(j,i)<I_min
            I_filter3 = 0;
        else
            I_filter3(j,i) = (255/(I_max-I_min))*(I_filter2(j,i)-I_min)+0;
        end
    end
    
end

% I_filter3=imadjust(I_filter3,[0,0.5],[],0.5);%对比度增强
%  I_filter3 = 255-I_filter3;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M8=[1 1 1; 1 0 1; 1 1 1];      % 8邻域平均滤波
M8=M8/8;
I_filter3=filter2(M8,I_filter3);
I_filter3=medfilt2(I_filter3);%中值滤波处理
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  s=[0,0,-1,0,0;0,-1,-2,-1,0;-1,-2,16,-2,-1;0,-1,-2,-1,0;0,0,-1,0,0];% LOG算子,边缘检测
% % %s=[-2,-4,-4,-4,-2;-4,0,8,0,-4;-4,8,24,8,-4;-4,0,8,0,-4;-2,-4,-4,-4,-2];%% LOG算子,边缘检测
%  I_filter3=double(I_filter3);
%  I_filter3=conv2(I_filter3,s); 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% imwrite(uint8(I_filter3),'灰度拉伸后(负像)a=30,b=2,c=4.bmp');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   应用区域生长法进行边缘检测
pic_sum = 0;
pic_sum = sum(I_filter3(:,Width/2));%选定一个目标区域,并计算该区域的平均灰度值
pic_avg = pic_sum/Height;

pic_var = var(var(I_filter3));%求方差
pic_var_sqrt = sqrt(pic_var);
u = 1;
door = u*pic_var_sqrt;

Seeds = zeros(1,Width*Height);%种子队列
Flag_grow = zeros(1,Width*Height);
Flag_target = zeros(1,Width*Height);

Seeds(1,1) = I_filter3(uint8(Height/2),uint8(Width/2));
for i = 1:Width
    for j = 1:Height
        if abs(I_filter3(j,i)-pic_avg)<door
           
        end
    end
end
%  I_filter4 = imadjust(I_filter3,[0,0.5],[0.5,1]);%亮度调整
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
imshow(uint8(I_filter3));
title('处理后的图像');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -