当前位置: 首页 > news >正文

MATLAB与图像处理的那点小事儿~

目录

一、学习内容

二、matlab基本知识

三、线性点运算

四、非线性点运算,伽马矫正

五、直方图

1、直方图均衡化

(1)使用histep函数实现图像均衡化

(2)使用自行编写的均衡化函数实现图像均衡化 

2、直方图规定化

(1)使用histep函数实现图像均衡化

(2)使用自行编写的规定化函数实现图像规定化

六、平滑滤波器

1、T3 

(1)图像平滑: 

(2)图像增强:

2、中值滤波

3、高斯滤波

七、Sobel算子、Prewitt算子、Roberts算子和LoG滤波器

1、Sobel算子

2、Prewitt算子

3、Roberts算子

4、LoG滤波器

5、几种算子的比较


一、学习内容

1、学习使用点运算,非线性点运算,伽马矫正处理图像
2、利用histeg函数,实现直方图规定化
3、不使用histeq函数,自行编写直方图均衡化函数,并用于图像处理
4、学习使用平滑滤波器: 、高斯滤波处理图像
5、学习使用Sobel算子、Prewitt算子、Roberts算子和LoG算子

二、matlab基本知识

1、常用函数

imread:读取图像,

imshow:显示图像

rgb2gray:彩色图像转换为灰度图像

figure:创建窗口

subplot:单个窗口绘制多个图像

2、%%使得代码分块运行,%用于注释

3、安装路径下的:toolbox\images\imdata带有matlab自带的图像,可直接使用(文末有本文章使用的全部图像,可自行下载)

4、命令框:doc 函数名 可以跳转官方说明文档,查看函数使用

5、函数定义需要放在代码后,函数支持多个返回值

6、常用命令和符号

 

三、线性点运算

数字图像数据是以矩阵形式存放的,矩阵的每个元素对应着一个像素点的像素值。点运算又称对比增强、对比拉升或灰度变换,通过图像中的每一个像素值进行运算的图像处理方式,其运算结果不会改变图像内像素点之间的空间关系,常用于改变图像的灰度范围及分布,

其运算的数学关系式为:

I(x,y)—原图像
O(x,y)—经过点运算处理后的图像
T—点运算的关系函数

线性点运算的灰度变换函数形式可以采用线性方程描述,即o(x,y) = a*I(x,y)+ b,即通过数乘及加法改变图像的灰度范围及分布,使用点运算需要注意结果不能超过限定值,否则将导致图片过曝或者损失暗部细节

%%
% 点运算,实现图像对比度的改变
clc;clear;close all;    % 初始化
Image1=imread(strip(input('请输入照片路径(图片右键复制文件地址即可):','s'),'"'));  % 读入一幅图像
Image1=im2double(Image1); % 转换数据类型为double
subplot(231);imshow(Image1);title('原图');
% 增加对比度并显示
a=2;b=-50;  % 增加对比度
O=a.*Image1+b/255;
subplot(232);imshow(O);title('a=2;b=-50,增加对比度');% 降低对比度并显示
a=0.5;b=-50;    %降低对比度
O=a.*Image1+b/255;
subplot(233);imshow(O);title('a=0.5;b=-50,降低对比度');% 线性增加亮度
a=1;b=50;
O=a.*Image1+b/255;
subplot(234);imshow(O);title('a=1;b=50,线性平移增加亮度');% 线性降低亮度
a=1;b=-50;
O=a.*Image1+b/255;
subplot(235);imshow(O);title('a=1;b=-50,线性平移降低亮度');% 图像反色
a=-1;b=255;
O=a.*Image1+b/255;
subplot(236);imshow(O);title('a=-1;b=255,图像反色');

 对比色环可以发现:
① b一定,a越大,对比度增加,越明亮
② a一定,b越大,越明亮,但是对比度不变,颜色向着色环中心靠近
③  a=-1,b=255时,颜色取反,即在色环中变成中心对称的颜色,像黄色变成蓝色

四、非线性点运算,伽马矫正

当处理后的图像各个像素点不与原图像成线性关系时,即为非线性点运算

常用的非线性点运算有伽马矫正(Gamma Correction),他是一种图像或视频处理技术,它可以使人眼看到的颜色更加精确和鲜艳。

运算的数学关系式为:

伽马值γ < 1的情况有时被称作编码伽马值, 也叫伽马压缩。低灰度值区域动态范围变大,增强灰暗区域的对比度,图像整体灰度值变大;

伽马值γ > 1的情况有时也被称作解码伽马值,也叫伽马展开。高灰度值区域动态范围变大,增强明亮区域的对比度,图像整体灰度值变小。

%%
%伽马矫正
clc 
Image1=imread(strip(input('请输入照片路径(图片右键复制文件地址即可):','s'),'"')); 
Image1 = rgb2gray(Image1);
Image2 = imadjust(Image1,[],[],2);
Image3 = imadjust(Image1,[],[],1);
Image4 = imadjust(Image1,[],[],0.5);figure,
subplot(241),imshow(Image1),title('原图');
subplot(242),imshow(Image2),title('Gamma 2');
subplot(243),imshow(Image3),title('Gamma 1');
subplot(244),imshow(Image4),title('Gamma 0.5');
subplot(245),imhist(Image1),title('原图直方图');
subplot(246),imhist(Image2),title('Gamma 2 直方图');
subplot(247),imhist(Image3),title('Gamma 1 直方图');
subplot(248),imhist(Image4),title('Gamma 0.5 直方图');

伽马值γ=0.5,低灰度值区域动态范围变大,增强灰暗区域的对比度,图像整体灰度值变大;伽马值γ=1时图像与原先一致;伽马值γ=2时高灰度值区域动态范围变大,增强明亮区域的对比度,图像整体灰度值变小。 

五、直方图

图片直方图是一种用于表示数字图像亮度分布的图表,由一系列相邻区间组成的垂直条形图,每个区间代表了一个亮度范围,并给出该亮度范围内像素数量的计数。横轴表示亮度值的范围,纵轴表示该亮度值范围内像素的数量。直方图可以用来分析图像的亮度、对比度、色彩平衡等特征。

1、直方图均衡化

直方图均衡(Histogram Equalization)是一种图像处理技术,它可以通过重新分配图像像素的亮度值来增强图像的对比度和清晰度,从而改善图像的质量。在直方图均衡化技术中,算法的主要目标是对输入图像的亮度分布进行变换,使其均匀分布在整个亮度范围内,从而使图像的亮度值空间更加合理,增强图像的明暗效果。

直方图均衡化的过程如下: 

直方图均衡化在图像增强、图像分割、运动检测、图像配准等领域有着广泛的应用。需要注意的是,在一些情况下,直方图均衡化可能会导致图像细节的丢失和不自然的效果,因此在使用该技术时应根据实际情况选择是否合适。

(1)使用histep函数实现图像均衡化

注:里面同时包含了使用histep实现图像规定化,可在看完图像规定化后返回阅读

%%
%直方图均衡化,规定化
clc;clear;close all;%读入文件文件
Image1 = rgb2gray(imread(strip(input('请输入lena路径(图片右键复制文件地址即可):','s'),'"')));%读取图像并灰度化
Image2 = imread(strip(input('请输入coins路径(图片右键复制文件地址即可):','s'),'"'));%读取coins图片
Image3 = imread(strip(input('请输入circuit路径(图片右键复制文件地址即可):','s'),'"'));%读取circuit图片
Image4 = imread(strip(input('请输入cameraman路径(图片右键复制文件地址即可):','s'),'"'));%读取cameraman图片%获取直方图
Hgram2 = imhist(Image2);%获取直方图
Hgram3 = imhist(Image3);
Hgram4 = imhist(Image4);%histeq函数实现直方图的均衡化和规定化
result1 = histeq(Image1);    %直方图均衡化
result2 = histeq(Image1,Hgram2);     %直方图的规定化到coins 
result3 = histeq(Image1,Hgram3);     %直方图的规定化到circuit 
result4 = histeq(Image1,Hgram4);     %直方图的规定化到cameramansubplot(221),imshow(Image1),title('原图');
subplot(222),imshow(result1),title('直方图均衡化');
subplot(223),imhist(Image1),title('原图直方图');
subplot(224),imhist(result1),title('均衡化之后的图像的直方图');figure,
subplot(231),imshow(Image1),title('原图');
subplot(232),imshow(Image2),title('目标图');
subplot(234),imhist(Image1),title('原图直方图');
subplot(235),imhist(Image2),title('目标图直方图');
subplot(233),imshow(result2),title('直方图的规定化到coins');
subplot(236),imhist(result2),title('规定化之后图像的直方图');figure,
subplot(231),imshow(Image1),title('原图');
subplot(232),imshow(Image3),title('目标图');
subplot(234),imhist(Image1),title('原图直方图');
subplot(235),imhist(Image3),title('目标图直方图');
subplot(233),imshow(result3),title('直方图的规定化到circuit');
subplot(236),imhist(result3),title('规定化之后图像的直方图');figure,
subplot(231),imshow(Image1),title('原图');
subplot(232),imshow(Image4),title('目标图');
subplot(234),imhist(Image1),title('原图直方图');
subplot(235),imhist(Image4),title('目标图直方图');
subplot(233),imshow(result4),title('直方图的规定化到cameraman');
subplot(236),imhist(result4),title('规定化之后图像的直方图');

由图像可以看到,经过均衡化后,图像的直方图分布变均匀,对比度下降,形成灰度级分布概率均衡的图像。

经过规定化后,图像的灰度级分布分布与规定化的分布规律相同 

(2)使用自行编写的均衡化函数实现图像均衡化 

%%
% 不使用histep函数实现均衡化
clc
Image1=imread(strip(input('请输入照片路径(图片右键复制文件地址即可):','s'),'"')); %读取图像
%判断是否为灰度图像
mysize=size(Image1);
if numel(mysize)>2 %若维度大于2Image1=rgb2gray(Image1); %将彩色图像转换为灰度图像
endresult1 = hist_1(Image1);%调用函数均衡化result2 = histeq(Image1);figure,
subplot(231),imshow(Image1),title('原图');
subplot(234),imhist(Image1),title('原图直方图');
subplot(232),imshow(result1),title('自行编写直方图均衡化');
subplot(235),imhist(result1),title('自行编写均衡化直方图');
subplot(233),imshow(result2),title('内置直方图均衡化');
subplot(236),imhist(result2),title('使用内置均衡化直方图');%%
%函数部分,均衡化函数
function hist_img = hist_1(I)[R, C] = size(I);%获取图片行列像素点个数img_size = R*C;%得总像素点c = zeros(1,256);%返回1*256一维数组,元素均为0,用于统计每个像素值的个数b= c;%存档,用于转化前后的对照表%Max1=max(max(I))%Min1=min(min(I))temp = I(:);temp = sort(temp);%像素点灰度值排序for i = 1:img_size %遍历全部像素点c(temp(i)+1) = c(temp(i)+1)+1;  %索引c中对应的temp(i)+1位加1,temp为灰度值     end%若引入累积分布函数最小值cdfmin时,不需要执行c=c/img_size;c=c/img_size;a = c;for i = 2:256 %求和,得到累积分布函数a(i) = c(i) + a(i-1);end%根据直方图均衡化算式计算均衡化的灰度值for j = 1:256if a(j) > 0b(j)=round(255*(a(j)),1);endend%映射for i = 1:Rfor j = 1:CI(i,j) = b(I(i,j)+1);end       end%查看均衡化后矩阵最大最小值%Min2=min(min(I))%返回每一列最小的值后再取最小值%Max2=max(max(I))hist_img = I;figure;plot(b)title('变化前后映射')end

 

2、直方图规定化

直方图规定化是一种图像处理技术,主要目的是将两幅图像的像素值分布调整到相似的范围,从而使它们在视觉上更加一致。其使用了一些数学统计的方法,将待处理图像的像素值映射到目标图像的像素值范围内。

直方图规定化的处理方法包括以下步骤:

直方图规定化被广泛应用于图像处理和计算机视觉领域,例如在图像匹配、图像拼接、图像增强等方面都有应用。

(1)使用histep函数实现图像均衡化

查看“使用histep函数实现图像均衡化”

(2)使用自行编写的规定化函数实现图像规定化

①实现一图像到另一图像规定化

%%
% 输入两幅图像实现规定化
clc;
Image1=imread(strip(input('请输入原图路径(图片右键复制文件地址即可):','s'),'"')); %读取图像
%判断是否转换为灰度值
while 1str=input('是否需要转换为灰度图片(Y/N):','s');if str=='Y'Image1=rgb2gray(Image1);breakelseif str=='N'breakelse disp('输入错误,请重新输入')end
endImage2=imread(strip(input('请输入规定化路径(图片右键复制文件地址即可):','s'),'"')); %读取图像result1 = prescriptive(Image1,Image2);%调用函数规定化Hgram1 = imhist(Image1);%内置均衡化
Hgram2 = imhist(Image2);
result2 = histeq(Image1,Hgram2);
%result2 = histeq(Image1);figure,
subplot(231),imshow(Image1),title('原图');
subplot(234),imhist(Image1),title('原图直方图');
subplot(232),imshow(result1),title('自行编写直方图规定化');
subplot(235),imhist(result1),title('自行编写规定化直方图');
subplot(233),imshow(result2),title('内置直方图规定化');
subplot(236),imhist(result2),title('使用内置规定化直方图');%%
%函数部分——规定化函数
function prescribed_picture=prescriptive(I,J)[R1, C1] = size(I);%获取图片行列像素点个数img_size1 = R1*C1;%得总像素点c1 = zeros(1,256);%返回1*256一维数组,元素均为0,用于统计每个灰度值像素的个数b1= c1;%存档,用于转化前后的对照表[R2, C2] = size(J);%获取图片行列像素点个数img_size2 = R2*C2;%得总像素点c2 = zeros(1,256);%返回1*256一维数组,元素均为0,用于统计每个灰度值像素的个数%b2= c2;%存档,用于转化前后的对照表temp1 = I(:);temp1 = sort(temp1);%像素点灰度值排序temp2 = J(:);temp2 = sort(temp2);%像素点灰度值排序for i = 1:img_size1 %遍历全部像素点c1(temp1(i)+1) = c1(temp1(i)+1)+1;  %索引c中对应的temp(i)+1位加1,temp为灰度值endfor i = 1:img_size2 %遍历全部像素点c2(temp2(i)+1) = c2(temp2(i)+1)+1;  %索引c中对应的temp(i)+1位加1,temp为灰度值enda1 = c1./img_size1;c1=a1;a2 = c2./img_size2;c2=a2;for i = 2:256 %求和,得到累积分布函数a1(i) = (c1(i) + a1(i-1));a2(i) = (c2(i) + a2(i-1));endshine_upon=1;proximit=256;%计算规定化的灰度值for j = 1:256for i = 1:256if shine_upon>abs((a1(j)-a2(i)))shine_upon=abs((a1(j)-a2(i)));proximit=i;endendshine_upon=1;%b1(j)=a2(proximit);%b1(proximit)=b1(proximit)+a1(j);b1(j)=proximit;endfor i = 1:R1for j = 1:C1I(i,j) = b1(I(i,j)+1);end       end
%     Min2=min(min(I))%返回每一列最小的值后再取最小值
%     Max2=max(max(I))prescribed_picture = I;figure;plot(b1)title('变化前后映射')
end

 

②将图像向一下直方图规定化

%%
%特定规定化直方图
clc;
Image1=imread(strip(input('请输入照片路径(图片右键复制文件地址即可):','s'),'"')); %读取图像
%判断是否转换为灰度图片
while 1str=input('是否需要转换为灰度图片(Y/N):','s');if str=='Y'Image1=rgb2gray(Image1);breakelseif str=='N'breakelse disp('输入错误,请重新输入')end
end[result1,shine_upon,cumulative,prescriptive_diagram] = prescriptive2(Image1);%调用函数规定化result2 = histeq(Image1,Hgram2);figure,
subplot(231),imshow(Image1),title('原图');
subplot(234),imhist(Image1),title('原图直方图');
subplot(232),imshow(result1),title('自行编写直方图规定化');
subplot(235),imhist(result1),title('自行编写规定化直方图');
subplot(233),plot(shine_upon),title('变化前后映射')
subplot(236),plot(prescriptive_diagram),title('         规定化的直方图')%%
%函数部分-规定化函数(仅能规划到特定直方图)
function [prescribed_picture,b1,test2,test]=prescriptive2(I)[R1, C1] = size(I);%获取图片行列像素点个数img_size1 = R1*C1;%得总像素点c1 = zeros(1,256);%返回1*256一维数组,元素均为0,用于统计每个灰度值像素的个数b1= c1;%存档,用于转化前后的对照表pixels = I(:);pixels = sort(pixels);%像素点灰度值排序for i = 1:img_size1 %遍历全部像素点c1(pixels(i)+1) = c1(pixels(i)+1)+1;  %索引c中对应的temp(i)+1位加1,temp为灰度值enda1 = c1./img_size1;%原始图像直方图c1=a1;%存档用于累加%规定化直方图编写Max=2/255;%直方图峰值%通过分段函数test(i)=a*i+Max  i=1:128;  test(i)=-a*i-Max  i=128:256获得特定直方图a=-Max/128;test = zeros(1,256);for i =1:128test(i)=a*i+Max;endfor i=128:256test(i)=-a*i-Max;endtest2=test;%存档用于累加for i = 2:256 %求和,得到累积分布函数a1(i) = (c1(i) + a1(i-1));test2(i)=(test(i) + test2(i-1));endshine_upon=1;proximit=256;%计算规定化的灰度值for j = 1:256for i = 1:256if shine_upon>abs((a1(j)-test2(i)))shine_upon=abs((a1(j)-test2(i)));proximit=i;endendshine_upon=1;%b1(j)=a2(proximit);%b1(proximit)=b1(proximit)+a1(j);b1(j)=proximit;%灰度级映射end%像素点映射for i = 1:R1for j = 1:C1I(i,j) = b1(I(i,j)+1);end       endprescribed_picture = I;%返回映射图像
end

 

六、平滑滤波器

图像处理中的平滑滤波器是一种用于去除图像噪声和平滑图像的技术。平滑滤波器通常被设计为在局部像素区域内,即矩阵内对像素进行平均处理,以减少像素值之间的高频分量或图像中的病态噪声。

在图像处理中,常见的平滑滤波器包括:

①平均滤波器(average filter):将像素区域内的灰度平均值替换为当前像素的值。它可以减少噪声,但也可能导致图像变得模糊。

②中值滤波器(median filter):像素区域内的灰度值取中值代替,可以有效地去除脉冲噪声和非高斯分布的噪声,但是可能会导致图像边界和细节丢失。

③高斯滤波器(Gaussian filter):对周围像素进行加权平均,权重与像素之间的距离呈高斯分布,可以保留图像的细节和边缘特征。

④双边滤波器(bilateral filter):在相邻像素之间增加一个因素,使平滑程度与像素相似度成正比,可以有效地平滑图像并保留良好的边缘。

平滑滤波器的选择取决于所需的平滑度、速度、细节和边缘保留程度。在图像处理中,通常需要进行实验性比较以确定哪种滤波器最适合特定的应用。

%%
%课后作业二 1、使用滤波器
clc;
Image1=imread(strip(input('请输入lena路径(图片右键复制文件地址即可):','s'),'"')); %读取图像
Image3=imread(strip(input('请输入cameraman路径(图片右键复制文件地址即可):','s'),'"')); %读取图像Image2=imnoise(Image1,"gaussian",0.03);
%Image4=rgb2gray(Image2);
%平滑滤波器
%图像平滑
T1=1/9*ones(3);
T2=1/10*[1,1,1;1,2,1;1,1,1];
%图像增强
T3=[-1,-1,-1;-1,9,-1;-1,-1,-1];
T4=[0,-1,0;-1,5,-1;0,-1,0];
T5=[1,-2,1;-2,5,-2;1,-2,1];
%中值滤波
l=medfilt3(Image2);
%高斯滤波器
gaussian_filter1=fspecial("gaussian",8,5);
gaussian_filter2=fspecial("gaussian",8,3);
gaussian_filter3=fspecial("gaussian",8,1);
gaussian_filter4=fspecial("gaussian",8,0.1);
%分别使用平滑滤波器,高斯滤波器对图片卷积
T1_image=imfilter(Image2,T1,"replicate","full","conv");
T2_image=imfilter(Image2,T2,"replicate","full","conv");
T3_image=imfilter(Image3,T3,"replicate","full","conv");
T4_image=imfilter(Image3,T4,"replicate","full","conv");
T5_image=imfilter(Image3,T5,"replicate","full","conv");gaussian_Image1=imfilter(Image2,gaussian_filter1,"replicate","full","conv");
gaussian_Image2=imfilter(Image2,gaussian_filter2,"replicate","full","conv");
gaussian_Image3=imfilter(Image2,gaussian_filter3,"replicate","full","conv");
gaussian_Image4=imfilter(Image2,gaussian_filter4,"replicate","full","conv");
%平滑滤波图像
figure,
subplot(221),imshow(Image1),title('原图');
subplot(222),imshow(Image2),title('添加高斯噪声');
subplot(223),imshow(T1_image),title('T1image');
subplot(224),imshow(T2_image),title('T2image');
%中值滤波图像
figure,
subplot(121),imshow(Image2),title('原图');
subplot(122),imshow(l),title('中值滤波');
%图像增强图像
figure,
subplot(221),imshow(Image3),title('原图');
subplot(222),imshow(T3_image),title('T3image');
subplot(223),imshow(T4_image),title('T4image');
subplot(224),imshow(T5_image),title('T5image');
%高斯滤波图像
figure,
subplot(231),imshow(Image1),title('原图');
subplot(234),imshow(Image2),title('添加高斯噪声');
subplot(232),imshow(gaussian_Image1),title('sigma=5');
subplot(233),imshow(gaussian_Image2),title('sigma=3');
subplot(235),imshow(gaussian_Image3),title('sigma=1');
subplot(236),imshow(gaussian_Image4),title('sigma=0.1');

1、T^{3} 

(1)图像平滑: 

 图像平滑特点:卷积核元素和为1,使用图像平滑可以降噪,使得图片变得光滑

(2)图像增强:

 图像增强特点:卷积核元素和为0,上述图像使用了不同的卷积核,可以看出T3image的图像增强效果最好,但同时也带来噪点。图像增强增强了图像的对比度、亮度、色彩等,去除图像中的噪声、模糊和伪影等,从而使图像更加清晰、质量更好。

2、中值滤波

 中值滤波特点:相比于线性滤波器,中值滤波器不会平滑图像的边缘使得图像更好地保留图像的边缘信息。

3、高斯滤波

高斯滤波特点:当sigma增加时,图片逐渐变得模糊,同时也变得光滑,边缘损失加剧。 

七、Sobel算子、Prewitt算子、Roberts算子和LoG滤波器

1、Sobel算子

Sobel算子是一种常用的图像处理算子,用于在数字图像中进行边缘检测,其核心思想是通过计算像素值在两个方向上的梯度来检测图像中的边缘。Sobel算子是一种线性滤波器,通常与高斯滤波器一起使用。

Sobel算子可以检测垂直和水平方向上的变化,对于图像中的边缘或轮廓而言,常常表现为亮度变化或者颜色的变化。Sobel算子的运算方式类似于卷积,以3x3的矩阵为例,Sobel算子的核心矩阵如下:

-1 0 1

-2 0 2

-1 0 1

对于一幅灰度图像,可以利用Sobel算子分别对两个方向进行计算,以得到图像中所有的边缘信息,这些信息可以进一步用于图形分析、边缘检测、图像分割等诸多应用。

Sobel算子具有较强的抵抗噪声能力,它可以减少一些非边缘的噪声干扰,同时保持边缘的准确性,是一种常用的边缘检测算法。

2、Prewitt算子

Prewitt算子同Sobel算子一样是一种用于数字图像边缘检测的线性滤波器,它主要是用于检测图像中水平和垂直方向梯度的变化。Prewitt 算子与Sobel算子类似,它们的差别在于各自的卷积核。

Prewitt算子的卷积核可以表示为以下两个矩阵:

-1 0 1

-1 0 1

-1 0 1

-1 -1 -1

0 0 0

1 1 1

这两个卷积核分别对应了垂直和水平方向上的边缘信息。Prewitt算子也可分别用这两个核来检测图像中的水平和垂直边缘,它们的实际应用方式类似于Sobel算子。

与Sobel算子相比较,Prewitt算子还是有一些不同的。Prewitt算子相对来说计算速度较快,但它检测到的边缘可能并不如Sobel算子那样尖锐,而且不够稳健,对图像噪声抗干扰能力较低。因此在实际处理过程中,需要综合考虑应用情况和对算法性能要求等因素,选择合适的边缘检测算法。

3、Roberts算子

Roberts算子是图像处理中另一种常见的边缘检测算子,它也是一种线性滤波器,但与Sobel算子和Prewitt算子不同,Roberts算子通过在图片转换成的二维灰度图像中找出像素值的差异来检测边缘,该算法通常用于单色图像,即对于每个颜色通道都要进行边缘检测。

Roberts算子采用的是两个 2x2 的卷积核:

1  0

0 -1

这两个卷积核可用于分别对图像进行水平和垂直方向的卷积计算。在卷积过程中,原始图像中每一个像素点都与模板进行计算,最终得到的是图像中每一个像素点的边缘强度值。与Sobel算子类似,边缘检测结果是一张二值图像,黑色表示背景,白色表示图像中的边缘。

Roberts算子是一种简单直观的边缘检测算法,计算速度十分快速,尤其是在处理小型图像时。此外,该算法对于细节的反应很快,可以提供较为精确的边缘检测结果,但对于噪声敏感,存在一定的误检率问题。

4、LoG滤波器

LoG卷积滤波器,即Laplacian of Gaussian 滤波器,是在 拉普拉斯滤波Laaplacian Filter的基础上,把高斯滤波加入到其中,用于数字图像中的边缘、细节信息提取。相比于其他的图像滤波算法,LoG滤波算法可以实现多种图像特征的提取,如边缘、斑点和角点等。

LoG滤波器计算的是图像像素的二阶导数,以此来检测图像中的边缘信息和主峰点。通过在数字图像上使用LoG滤波器,可以得到黑色或白色的边缘,可以用于图像中的边缘检测。

5、几种算子的比较

Robert算子定位比较精确,但由于不包括平滑,所以对于噪声比较敏感;

Prewitt算子和Sobel算子都是一阶的微分算子,而前者是平均滤波,后者是加权平均滤波且检测的图像边缘可能大于2个像素。这两者对灰度渐变低噪声的图像有较好的检测效果,但是对于混合多复杂噪声的图像,处理效果就不理想了。;

LOG滤波器方法通过检测二阶导数过零点来判断边缘点。LOG滤波器中的a正比于低通滤波器的宽度,a越大,平滑作用越显著,去除噪声越好,但图像的细节也损失越大,边缘精度也就越低。所以在边缘定位精度和消除噪声级间存在着矛盾,应该根据具体问题对噪声水平和边缘点定位精度要求适当选取。

%%
%作业二 2、Sobel算子、Prewitt算子、Roberts算子和LoG算子
clc;
Image1=imread(strip(input('请输入lena路径(图片右键复制文件地址即可):','s'),'"')); %读取图像
Image2=imnoise(Image1,"gaussian",0.03);Image3=rgb2gray(Image1);
Image4=rgb2gray(Image2);%Robert算子
Robert1=[ 0, 1;-1, 0];
Robert2=[ 1, 0;0,-1];bw3=edge(Image3,"roberts");
%Prewitt算子
Prewitt1=[-1, 0, 1;-1, 0, 1;-1, 0, 1];Prewitt2=[-1,-1,-1;0, 0, 0;1, 1, 1];
%Sobel算子
Sobel1=[-1, 0, 1;-2, 0, 2;-1, 0, 1];Sobel2=[-1,-2,-1;0, 0, 0;1, 2, 1];
%LoG算子
LoG=[ 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];Robert1_Image1=imfilter(Image1,Robert1,"replicate","full","conv");
Prewitt1_Image1=imfilter(Image1,Prewitt1,"replicate","full","conv");
Sobel1_Image1=imfilter(Image1,Sobel1,"replicate","full","conv");
Sobel2_Image1=imfilter(Image1,Sobel2,"replicate","full","conv");
LoG_Image1=imfilter(Image1,LoG,"replicate","full","conv");Robert1_Image2=imfilter(Image2,Robert1,"replicate","full","conv");
Prewitt1_Image2=imfilter(Image2,Prewitt1,"replicate","full","conv");
Sobel1_Image2=imfilter(Image2,Sobel1,"replicate","full","conv");
Sobel2_Image2=imfilter(Image2,Sobel2,"replicate","full","conv");
LoG_Image2=imfilter(Image2,LoG,"replicate","full","conv");Robert1_Image3=imfilter(Image3,Robert1,"replicate","full","conv");
Prewitt1_Image3=imfilter(Image3,Prewitt1,"replicate","full","conv");
Sobel1_Image3=imfilter(Image3,Sobel1,"replicate","full","conv");
Sobel2_Image3=imfilter(Image3,Sobel2,"replicate","full","conv");
LoG_Image3=imfilter(Image3,LoG,"replicate","full","conv");Robert1_Image4=imfilter(Image4,Robert1,"replicate","full","conv");
Prewitt1_Image4=imfilter(Image4,Prewitt1,"replicate","full","conv");
Sobel1_Image4=imfilter(Image4,Sobel1,"replicate","full","conv");
Sobel2_Image4=imfilter(Image4,Sobel2,"replicate","full","conv");
LoG_Image4=imfilter(Image4,LoG,"replicate","full","conv");figure,
subplot(131),imshow(Image1),title('原图');
subplot(132),imshow(bw3),title('原图');%显示卷积彩色图
figure,
subplot(231),imshow(Image1),title('原图');
subplot(232),imshow(Robert1_Image1),title('Robert1_Image1');
subplot(233),imshow(Prewitt1_Image1),title('Prewitt1_Image1');
subplot(234),imshow(Sobel1_Image1),title('Sobel1_Image1');
subplot(235),imshow(Sobel2_Image1),title('Sobel2_Image1');
subplot(236),imshow(LoG_Image1),title('LoG_Image1');
%显示卷积高斯彩色图
figure,
subplot(231),imshow(Image2),title('添加高斯噪声');
subplot(232),imshow(Robert1_Image2),title('Robert1_Image2');
subplot(233),imshow(Prewitt1_Image2),title('Prewitt1_Image2');
subplot(234),imshow(Sobel1_Image2),title('Sobel1_Image2');
subplot(235),imshow(Sobel2_Image2),title('Sobel2_Image2');
subplot(236),imshow(LoG_Image2),title('LoG_Image2');
%显示卷积灰度图
figure,
subplot(231),imshow(Image3),title('灰度图');
subplot(232),imshow(Robert1_Image3),title('Robert1_Image3');
subplot(233),imshow(Prewitt1_Image3),title('Prewitt1_Image3');
subplot(234),imshow(Sobel1_Image3),title('Sobel1_Image3');
subplot(235),imshow(Sobel2_Image3),title('Sobel2_Image3');
subplot(236),imshow(LoG_Image3),title('LoG_Image3');
%显示卷积高斯灰度图
figure,
subplot(231),imshow(Image4),title('灰度图添加高斯噪声');
subplot(232),imshow(Robert1_Image4),title('Robert1_Image4');
subplot(233),imshow(Prewitt1_Image4),title('Prewitt1_Image4');
subplot(234),imshow(Sobel1_Image4),title('Sobel1_Image4');
subplot(235),imshow(Sobel2_Image4),title('Sobel2_Image4');
subplot(236),imshow(LoG_Image4),title('LoG_Image4');

 未添加高斯噪声:

 

  添加高斯噪声:

 

Sobel,Prewitt边缘检测较为准确,而Roberts提取边缘不太明显,但是提取的位置准确,没有将头发提取进去。而LoG提取边缘效果较强,帽子褶皱也被提取出来。对噪声比较敏感。在添加高斯噪声后,Sobel、Prewitt、LoG均被噪声干扰,而Roberts任然能够精确的提取边缘。此外Sobel1,Sobel2分别代表纵向和横向,检测效果也些许不同。

除了使用二维数组创建各类算子卷积核外,还可以使用edge生成相应的算子卷积核

bw1=edge(b,‘sobel’);%sobel算子 
bw2=edge(b,‘prewitt’);%prewitt算子 
bw3=edge(b,‘roberts’);%roberts算子 
bw4=edge(b,‘log’); %log算子 
bw5=edge(b,‘canny’);%canny算子

图片链接:百度网盘_提取码为MTLB

除了使用MATLAB进行图像处理外,python的cv2也可进行图像处理,感兴趣可以了解一下


MATLAB图像处理到此结束啦

要是文章有帮助的话

就点赞收藏关注一下啦!

感谢大家的观看

欢迎大家提出问题并指正~

 

相关文章:

MATLAB与图像处理的那点小事儿~

目录 一、学习内容 二、matlab基本知识 三、线性点运算 四、非线性点运算&#xff0c;伽马矫正 五、直方图 1、直方图均衡化 &#xff08;1&#xff09;使用histep函数实现图像均衡化 &#xff08;2&#xff09;使用自行编写的均衡化函数实现图像均衡化 2、直方图规定…...

第十四届蓝桥杯模拟赛(第三期)Java组个人题解

第十四届蓝桥杯模拟赛&#xff08;第三期&#xff09;Java组个人题解 今天做了一下第三期的校内模拟赛&#xff0c;有些地方不确定&#xff0c;欢迎讨论和指正~ 文章目录第十四届蓝桥杯模拟赛&#xff08;第三期&#xff09;Java组个人题解填空题部分第一题【最小数】第二题【E…...

Go语言之条件判断循环语句(if-else、switch-case、for、goto、break、continue)

一、if-else条件判断语句 Go中的if-else条件判断语句跟C差不多。但是需要注意的是&#xff0c;Go中强制规定&#xff0c;关键字if和else之后的左边的花括号"{“必须和关键字在同一行&#xff0c;若使用了else if结构&#xff0c;则前段代码快的右花括号”}"必须和关…...

深入理解AQS

概念设计初衷&#xff1a;该类利用 状态队列 实现了一个同步器&#xff0c;更多的是提供一些模板方法&#xff08;子类必须重写&#xff0c;不然会抛错&#xff09;。 设计功能&#xff1a;独占、共享模式两个核心&#xff0c;state、Queue2.1 statesetState、compareAndSetSta…...

JVM学习笔记十:执行引擎

0. 前言 声明&#xff1a; 感谢尚硅谷宋红康老师的讲授。 感谢广大网友共享的笔记内容。 B站&#xff1a;https://www.bilibili.com/video/BV1PJ411n7xZ 本文的内容基本来源于宋老师的课件&#xff0c;其中有一些其他同学共享的内容&#xff0c;也有一些自己的理解内容。 1. …...

【2023-03-10】JS逆向之美团滑块

提示&#xff1a;文章仅供参考&#xff0c;禁止用于非法途径 前言 目标网站:aHR0cHM6Ly9wYXNzcG9ydC5tZWl0dWFuLmNvbS9hY2NvdW50L3VuaXRpdmVsb2dpbg 页面分析 接口流程 1.https://passport.meituan.com/account/unitivelogin主页接口&#xff1a;需获取下面的参数&#xff0…...

全志V853芯片放开快启方案打印及在快起方式下配置isp led的方法

全志V85x芯片 如何放开快启方案的打印&#xff1f; 1.主题 如何放开快启方案的打印 2.问题背景 产品&#xff1a;v851系列快启方案 软件&#xff1a;tina 其他&#xff1a;特有版本信息添加自由描述 &#xff08;如固件版本&#xff0c;复现概率&#xff0c;特定环境&#x…...

大数据 | (一)Hadoop伪分布式安装

大数据原理与应用教材链接&#xff1a;大数据技术原理与应用电子课件-林子雨编著 Hadoop伪分布式安装借鉴文章&#xff1a;Hadoop伪分布式安装-比课本详细 大数据 | &#xff08;二&#xff09;SSH连接报错Permission denied&#xff1a;SSH连接报错Permission denied 哈喽&a…...

Django/Vue实现在线考试系统-06-开发环境搭建-Django安装

1.0 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(…...

KaiwuDB 时序引擎数据存储内存对齐技术解读

一、理论1、什么是内存对齐现代计算机中内存空间都是按照 byte 划分的&#xff0c;在计算机中访问一个变量需要访问它的内存地址&#xff0c;从理论上看&#xff0c;似乎对任何类型的变量的访问都可以从任何地址开始。但在实际情况中&#xff0c;通常在特定的内存地址才能访问特…...

IR 808 Alkyne,IR-808 alkyne,IR 808炔烃,近红外吲哚类花菁染料

【产品理化指标】&#xff1a;中文名&#xff1a;IR-808炔烃英文名&#xff1a;IR-808 alkyne&#xff0c;Alkyne 808-IR CAS号&#xff1a;N/AIR-808结构式&#xff1a;规格包装&#xff1a;10mg&#xff0c;25mg&#xff0c;50mg&#xff0c;接受各种复杂PEGS定制服务&#x…...

elasticsearch

这里写目录标题1.初识ElasticSearch1.1 了解ES1.2 倒排索引1.2.1 正向索引1.2.2 倒排索引1.2.3 正向和倒排1.3 ES的一些概念1.3.1 文档和字段1.3.2 索引和映射1.3.3 mysql和elasticsearch1.4 安装ES、kibana1.初识ElasticSearch 1.1 了解ES elasticsearch是一款非常强大的开源…...

并发编程---java锁

java锁一 多线程锁synchronized案例分析1.1synchronized介绍1.2 synchronized案例分析1.2.1.标准访问&#xff0c;请问先打印邮件还是短信&#xff1f;1.2.2.邮件⽅法暂停4秒钟&#xff0c;请问先打印邮件还是短信&#xff1f;分析1.2.3.新增⼀个普通⽅法hello&#xff08;&…...

品牌营销 | 学习如何最大限度地发挥品牌营销的作用

您是否想过如何最大限度地发挥品牌营销的潜力&#xff1f;这是一项艰巨的挑战&#xff0c;通过了解品牌营销的基本组成部分&#xff0c;您可以成功地推广您的品牌。 &#xff08;图源&#xff1a;Pixabay&#xff09; 品牌营销的基本组成部分 你需要做什么来发展稳固的品牌&am…...

Linux驱动的同步阻塞和同步非阻塞

在字符设备驱动中&#xff0c;若要求应用与驱动同步&#xff0c;则在驱动程序中可以根据情况实现为阻塞或非阻塞一、同步阻塞这种操作会阻塞应用程序直到设备完成read/write操作或者返回一个错误码。在应用程序阻塞这段时间&#xff0c;程序所代表的进程并不消耗CPU的时间&…...

LearnOpenGL-光照-5.投光物

本人刚学OpenGL不久且自学&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/LearnOpenGLProject 文章目录投光物平行光点光源聚光不平滑的例子平滑例子投光物 前面几节使用的光照都来自于空间中的一个点 即…...

【C语言】每日刷题 —— 牛客语法篇(1)

前言 大家好&#xff0c;今天带来一篇新的专栏c_牛客&#xff0c;不出意外的话每天更新十道题&#xff0c;难度也是从易到难&#xff0c;自己复习的同时也希望能帮助到大家&#xff0c;题目答案会根据我所学到的知识提供最优解。 &#x1f3e1;个人主页&#xff1a;悲伤的猪大…...

【深度学习】Subword Tokenization算法

在自然语言处理中&#xff0c;面临的首要问题是如何让模型认识我们的文本信息&#xff0c;词&#xff0c;是自然语言处理中基本单位&#xff0c;神经网络模型的训练和预测都需要借助词表来对句子进行表示。 1.构建词表的传统方法 在字词模型问世之前&#xff0c;做自然语言处理…...

五分钟了解支付、交易、清算、银行等专业名词的含义?

五分钟了解支付、交易、清算、银行等专业名词的含义&#xff1f;1. 支付类名词01 支付应用02 支付场景03 交易类型04 支付类型&#xff08;按通道类型&#xff09;05 支付类型&#xff08;按业务双方类型&#xff09;06 支付方式07 支付产品08 收银台类型09 支付通道10 通道类型…...

4个工具,让 ChatGPT 如虎添翼!

LightGBM中文文档 机器学习统计学,476页 机器学习圣经PRML中文版...

初识PO、VO、DAO、BO、DTO、POJO时

PO、VO、DAO、BO、DTO、POJO 区别分层领域模型规约DO(Data Object)DTO(Data Transfer Object)BO(Business Object)AO(ApplicationObject)VO(View Object)Query领域模型命名规约&#xff1a;一、PO :(persistant object )&#xff0c;持久对象二、VO :(value object) &#xff0…...

[2.2.4]进程管理——FCFS、SJF、HRRN调度算法

文章目录第二章 进程管理FCFS、SJF、HRRN调度算法&#xff08;一&#xff09;先来先服务&#xff08;FCFS, First Come First Serve&#xff09;&#xff08;二&#xff09;短作业优先&#xff08;SJF, Shortest Job First&#xff09;对FCFS和SJF两种算法的思考&#xff08;三…...

【代码随想录Day55】动态规划

583 两个字符串的删除操作 https://leetcode.cn/problems/delete-operation-for-two-strings/72 编辑距离https://leetcode.cn/problems/edit-distance/...

Java开发 - 消息队列前瞻

前言 学完了Redis&#xff0c;那你一定不能错过消息队列&#xff0c;要说他俩之间的关联&#xff1f;关联是有的&#xff0c;但也不见得很大&#xff0c;只是他们都是大数据领域常用的一种工具&#xff0c;一种用来提高程序运行效率的工具。常见于高并发&#xff0c;大数据&am…...

MySQL连接IDEA详细教程

使用IDEA的时候&#xff0c;需要连接Database&#xff0c;连接时遇到了一些小问题&#xff0c;下面记录一下操作流程以及遇到的问题的解决方法。 目录 MySQL连接IDEA详细教程 MySQL连接IDEA详细教程 打开idea&#xff0c;点击右侧的 Database 或者 选择 View --> Tool Wind…...

线程(操作系统408)

基本概念 我们说引入进程的目的是更好的使用多道程序并发执行&#xff0c;提高资源的利用率和系统吞吐量&#xff1b;而引入线程的目的则是减小程序在并发执行的时候所付出的时间开销&#xff0c;提高操作系统的并发性能。 线程可以理解成"轻量级进程"&#xff0c;…...

功耗降低99%,Panamorph超清VR光学架构解析

近期&#xff0c;投影仪变形镜头厂商Panamorph获得新型VR显示技术专利&#xff08;US11493773B2&#xff09;&#xff0c;该专利方案采用了紧凑的结构&#xff0c;结合了Pancake透镜和光波导显示模组&#xff0c;宣称比传统VR方案的功耗、发热减少99%以上&#xff0c;可显著提高…...

【数据结构】带你深入理解栈

一. 栈的基本概念&#x1f4ab;栈是一种特殊的线性表。其只允许在固定的一端进行插入和删除元素的操作&#xff0c;进行数据的插入和删除的一端称作栈顶&#xff0c;另外一端称作栈底。栈不支持随机访问&#xff0c;栈的数据元素遵循后进先出的原则&#xff0c;即LIFO&#xff…...

认识CSS之如何提高写前端代码的效率

&#x1f31f;所属专栏&#xff1a;前端只因变凤凰之路&#x1f414;作者简介&#xff1a;rchjr——五带信管菜只因一枚&#x1f62e;前言&#xff1a;该系列将持续更新前端的相关学习笔记&#xff0c;欢迎和我一样的小白订阅&#xff0c;一起学习共同进步~&#x1f449;文章简…...

Vue中watch和computed

首先这里进行声明&#xff0c;这个讲的是vue2的内容&#xff0c;在vue3发生了什么变动与此无关 这里是官网&#xff1a; https://v2.cn.vuejs.org/v2/guide/installation.html computed > 计算属性 watch > 侦听器&#xff08;也叫监视器&#xff09; 其区别如下&…...

网站建设设计服务/上海全国关键词排名优化

【系列专栏】&#xff1a;博主结合工作实践输出的&#xff0c;解决实际问题的专栏&#xff0c;朋友们看过来&#xff01; 《QT开发实战》 《嵌入式通用开发实战》 《嵌入式Linux开发实战》 图像识别的原理、过程、应用前景&#xff0c;精华篇&#xff01; 转自&#xff1a;htt…...

ppt之家模板免费下载/seo优化工具推荐

面粉等级分类&#xff1a;⑴.特制一等粉(富强粉、精粉)  相当于前苏联一等粉&#xff0c;质量比国外的特等粉差&#xff0c;我国单独生产特制一等粉的出粉率为60%-70%。它适宜制作精度较高的面包、馒头、面条、包子等面制品。在生产特制一等粉中也可提取更高的精制粉&#xf…...

逸阳网站建设的目标/线上营销策略有哪些

一、什么是”数据科学” 在谈论RPy2之前&#xff0c;先来说一下“数据科学”&#xff0c;我要说的是“数据科学”是一个奇怪的词。因为几乎所有的科学都是“数据科学”。“无数据科学”则是完全不同的领域&#xff1a;哲学。“数据科学”是一门通过系统观察&#xff0c;对照实验…...

做网站和网页的目的和作用/网页制作代码模板

3月23日&#xff0c;中科院软件所蒋建春博士和广西贺州学院教学与计算机学院莫达隆书记一行来到51CTO学院了解考察&#xff0c;与51CTO总裁熊平、副总裁杨文飞&#xff0c;副总裁&#xff0c;51CTO学院联合创始人邱文平共话当前产学研的新通路&#xff0c;探索学历教育和职业教…...

门户网站系统开发/如何推广seo

MD5 的特性 MD5 是一种加密算法&#xff0c;在调用这个算法的时候&#xff0c;提供一个密码的明文&#xff0c; 调用的结果&#xff0c;得到一个 32 位长度的密文&#xff1b;MD5 算法的特性&#xff1a;相同的字符串&#xff0c;如果多次调用 md5 算法&#xff0c;得到的结果&…...

网站建设山东聚搜网络一x/网站推广和优化的原因

实例如下 首先咱们要实现行合并的问题必须要研究一下官方里面的案例&#xff1a; 会发现行的合并实现于&#xff0c;customerRender里面的参数配置attrs下面的rowSpan&#xff0c;项让该条数据的该项合并几行就rowSpannumber let obj {//item为表的一个字段名title:"na…...