图像处理中对Sobel算子怎么进行阈值处理

图像处理中对Sobel算子怎么进行阈值处理,第1张

可以自己设。

因为图像处理里经常是,没有很通用的方法。

一类图像用一种处理顺序+处理阈值有好的效果。

换了一类图像效果就不好了。

Sobel出来的应该是灰度图。你是后面再进行二值化。

可以用大津法(OTUS)对Sobel的结果图进行二值化。

还可以用大津法求出阈值后,做点变动,比如-5 什么的。

如果是写文章,那么就要把各种理论扯进去。

如果是做项目,就不管理论了。只要这一类图像效果好,

不要管阈值的设置有没有道理。

要保证这一类图有同样的照明和焦距。否则边界强度

会不同就讨厌了。

I = imread('lenabmp');

subplot(121);imshow(I);

%sobel算子模板

H = [1  2  1;

   0  0  0

   -1 -2 -1];

J = conv2(I,H,'same');     %卷积运算

subplot(122);imshow(uint8(J));

421 Roberts算法原理

Roberts算子是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子,他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。检测垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感,无法抑制噪声的影响。

422 算法流程

Roberts算子在2×2领域上计算对角导数

(4-1)

成为Roberts交叉算子。在实际应用中为了简化计算,用梯度函数的Roberts绝对值来近似

(4-2)另外还可以用Roberts 最大算子来计算

(4-3)

上式能够提供较好的不变性边缘取向。对于同等长度但取向不同的边缘,应用Roberts最大值算子比应用Roberts交叉算子所得到的合成幅度变化小。Roberts边缘检测算子的卷积算子为

Roberts 边缘算子方向模版

由上面两个卷积算子对图像运算后,代入(3-7)式,可求得图像的梯度幅度值,然后选取门限TH,做如下判断>TH,为阶跃状边缘点为一个二值图像,也就是图像的边缘图像。441 Prewitt 算法原理

Prewitt边缘算子是一种边缘样板算子。Prewitt 从加大边缘检测算子的模板大小出发,由2×2 扩大到3×3 来计算差分算子,采用Prewitt 算子不仅能检测边缘点,而且能抑制噪声的影响。

Prewitt 采用计算偏微分估计的方法,由式(4-9)所示的两个卷积算子形成了Prewitt边缘算子,样板算子由理想的边缘子图像构成,依次用边缘样板去检测图像,与被检测区域最为相似的样板给出最大值,用这个最大值作为算子的输出

(4-9)

另一种方法是,可以将Prewitt算子扩展到八个方向,每个模版对特定的边缘方向做出最大响应,所有8个方向中最大值作为边缘幅度图像的输出,这些算子样板由离线的边缘子图像构成。依次用边缘样板去检测图像,与被检测区域最为相似的的样板给出最大值。定义Prewitt 边缘检测的算子模版如下:

(1)1方向 (2)2方向 (3)3方向 (4)4方

给你一段代码\x0d\voidGradient(Mat&InputArray,Mat&OutputArray)\x0d\{\x0d\//转换为灰度图像\x0d\MatInputArray_gray(height,width,CV_32F);\x0d\cvtColor(InputArray,InputArray_gray,CV_RGB2GRAY);\x0d\//创建X、Y方向梯度图像变量\x0d\Matgrad_x,grad_y;\x0d\Matabs_grad_x,abs_grad_y;//梯度绝对值\x0d\//X方向梯度并取绝对值\x0d\Sobel(InputArray_gray,grad_x,InputArray_graydepth(),1,0);\x0d\convertScaleAbs(grad_x,abs_grad_x);\x0d\//Y方向梯度并取绝对值\x0d\Sobel(InputArray_gray,grad_y,InputArray_graydepth(),0,1);\x0d\convertScaleAbs(grad_y,abs_grad_y);\x0d\//计算梯度值的平方\x0d\pow(abs_grad_x,20f,abs_grad_x);\x0d\pow(abs_grad_y,20f,abs_grad_y);\x0d\//OutputArray=abs_grad_x+abs_grad_y;\x0d\add(abs_grad_x,abs_grad_y,OutputArray,noArray(),CV_32F);\x0d\//显示梯度平方\x0d\//imshow("Gradient",OutputArray);\x0d\//waitKey(0);\x0d\}

数字图像的边界提取:

I=imread('bonemarrtif');

[BW1,th1]=edge(I,'sobel',007);

th1str=num2str(th1)

imshow(I);

title('图1:bonemarrtif原图','fontsize',14,'position',[128,260,0]);

figure;imshow(BW1);

ti='图8: sobel算子提取的边界,阈值为';

ti=strcat(ti,th1str)

title(ti,'fontsize',12,'position',[128,260,0])

图像压缩:

clear

I=imread('blood1tif');

I=im2double(I);

T=dctmtx(8);

B=blkproc(I,[8 8],'P1xP2',T,T);

mask[1,1,1,1,0,0,0,0;1,1,1,0,0,0,0,0;1,1,0,0,0,0,0,0;1,0,0,0,0,0,0,0;0,0,0,0,0,0,0,0;0,0,0,0,0,0,0,0;0,0,0,0,0,0,0,0;0,0,0,0,0,0,0,0;]

B2=(blkproc(B,[8 8],'P1x',mask);

I2=blkproc(I,[8 8],'P1xP2',T,T);

subplot(1,2,1);

imshow(I);title('原图');

subplot(1,2,2);

imshow(I2);title('解压缩图');

以上就是关于图像处理中对Sobel算子怎么进行阈值处理全部的内容,包括:图像处理中对Sobel算子怎么进行阈值处理、matlab:试采用Sobel算子对一幅256灰度图像进行边缘提取、Matlab关于图像边缘提取,用Sobel算子、Roberts算子、Prewitt算子,加QQ详谈 急用!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9625177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存