可以自己设。
因为图像处理里经常是,没有很通用的方法。
一类图像用一种处理顺序+处理阈值有好的效果。
换了一类图像效果就不好了。
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详谈 急用!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)