Matlab-人机交互

原图:(可自提)

一、手动设计滤波器

1、均值滤波器

定义:在图像上,对待处理的像素给定一个模板(掩膜),该模板包括了该像素其周围的临近像素。将模板中的全体像素的均值来替代原来的像素值的方法。 

优点:算法简单,计算速度快。

缺点:降低噪声的同时使图像产生模糊,特别在边缘和细节处。而且邻域越大,在去噪能力增强的同时模糊程度越严重。

代码:

I = imread('xiaoxiaohou.png');
A = I(:,:,1);
A_salt = imnoise(A,'salt & pepper'); % 加入椒盐噪声
n = 1;
H = ones(3,3)/(3*3); % 3×3矩阵 n=2:5×5
[h,l,c] = size(A_salt); 
x1 = double(A_salt); 
x2 = x1; 
for i=n+1:h-n
    for j=n+1:l-n
        % 去除x1中从(i,j)开始的n行n列元素与模板相乘
        c = x1(i-n:i+n,j-n:j+n).*H;
        s = sum(c(:));
        x2(i,j) = s;
    end
end
A1 = uint8(x2);
A_gaosi = imnoise(A,'gaussian'); % 加入高斯噪声
H = ones(3,3)/(3*3);
[h,l,c] = size(A_gaosi);
x3 = double(A_gaosi);
x4 = x3; 
for i=n+1:h-n
    for j=n+1:l-n
        % 去除x1中从(i,j)开始的n行n列元素与模板相乘
        c = x1(i-n:i+n,j-n:j+n).*H;
        s = sum(c(:));
        x4(i,j) = s;
    end
end
A2 = uint8(x4);
figure;
subplot(2,2,[1,2]),imshow(A);title('原图');
subplot(223),imshow(A_salt);title('加入椒盐噪声后的图像');
subplot(224),imshow(A1);title('椒盐噪声图像进行均值滤波后的图像');
figure;
subplot(2,2,[1,2]),imshow(A);title('原图');
subplot(223),imshow(A_gaosi);title('加入高斯噪声后的图像');
subplot(224),imshow(A2);title('高斯噪声图像进行均值滤波后的图像');

2、中值滤波器

定义:对一个奇数点掩膜内的像素灰度值排序,用中值代替中心像素的原来灰度值。它是一种非线性的图像平滑法。

优点:对脉冲干扰及椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊。

缺点:对点、线等细节较多的图像却不合适。

代码:

I = imread('xiaoxiaohou.png');
A = I(:,:,1);
A_salt = imnoise(A,'salt & pepper'); % 加入椒盐噪声
%定义邻域尺寸
n = 2;
m = 5 ;
k = floor(m * m / 2) + 1 ;
[h,l,c] = size(A_salt); 
H = zeros(h , l) ;
t = zeros(n , n) ;
for i=n+1:h-n
    for j=n+1:l-n
        N = A_salt(i-n:i+n,j-n:j+n); % 得到3×3邻域
        t = N(:);
        s = sort(t);
        H(i,j) = s(k);
    end
end
A1 = uint8(H);
A_gaosi = imnoise(A,'gaussian'); % 加入高斯噪声
[h,l,c] = size(A_gaosi); 
H = zeros(h , l) ;
t = zeros(n , n) ;
for i=n+1:h-n
    for j=n+1:l-n
        N = A_gaosi(i-n:i+n,j-n:j+n); % 得到3×3邻域
        t = N(:);
        s = sort(t);
        H(i,j) = s(k);
    end
end
A2 = uint8(H);
figure;
subplot(2,2,[1,2]),imshow(A);title('原图');
subplot(223),imshow(A_salt);title('加入椒盐噪声后的图像');
subplot(224),imshow(A1);title('椒盐噪声图像进行均值滤波后的图像');
figure;
subplot(2,2,[1,2]),imshow(A);title('原图');
subplot(223),imshow(A_gaosi);title('加入高斯噪声后的图像');
subplot(224),imshow(A2);title('高斯噪声图像进行均值滤波后的图像');

对比:均值滤波和和中值滤波都可以起到平滑图像,滤去噪声的功能。均值滤波采用线性的方法,平均整个窗口范围内的像素值,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。均值滤波对高斯噪声表现较好,对椒盐噪声表现较差。中值滤波采用非线性的方法,它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘,选择适当的点来替代污染点的值,所以处理效果好,对椒盐噪声表现较好,对高斯噪声表现较差。

二、实现RGB转HSV空间

代码:

rgb=imread('peppers.png');%读入图像
subplot(221),imshow(rgb);title('原始图像')
hsv=rgb2hsv(rgb); %颜色空间转换
H=hsv(:,:,1); % 色调
S=hsv(:,:,2); % 饱和度
V=hsv(:,:,3); % 亮度
subplot(221);imshow(rgb); 
subplot(222);imshow(H);title('色调')
subplot(223);imshow(S);title('饱和度')
subplot(224);imshow(V);title('亮度')

三、手写边缘检测算子

一、Sobel算子:

相关:Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛,美中不足的是,Sobel算子并没有将图像的主题与背景严格地区分开来,即Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。

代码:

clear all ;
close all ;
imag = imread('xiaoxiaohou.png') ;%读取图像
imag = rgb2gray(imag) ;%转化为灰度图
subplot(1 , 2 , 1) ;
imshow(imag) ;
title('原图') ;
[high , width] = size(imag) ;%获得图像的高度和宽度
F2 = double(imag) ;
U = double(imag) ;
uSobel = imag ;
for i = 2 : high - 1
    for j = 2 : width - 1
        Gx = (U(i + 1 , j - 1) + 2 * U(i + 1 , j) + F2(i + 1 , j + 1)) - (U(i - 1 , j - 1) + 2 * U(i - 1 , j) + F2(i - 1 , j + 1)) ;
        Gy = (U(i - 1 , j + 1) + 2 * U(i , j + 1) + F2(i + 1 , j + 1)) - (U(i - 1 , j - 1) + 2 * U(i , j - 1) + F2(i + 1 , j - 1)) ;
        uSobel(i , j) = sqrt(Gx ^ 2 + Gy ^ 2) ;
    end
end
subplot(1 , 2 , 2) ;
imshow(im2uint8(uSobel)) ;
title('Sobel 边缘检测后') ;

待补充......

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

百步码力

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

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

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

打赏作者

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

抵扣说明:

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

余额充值