位置: IT常识 - 正文
推荐整理分享利用Matlab进行图像分割和边缘检测(利用matlab作图),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:利用matlab作图,如何利用matlab绘图,利用matlab进行图像平滑,归纳总结用matlab绘图的方法,归纳总结用matlab绘图的方法,利用matlab作图,利用matlab进行图像平滑,利用matlab进行图像边界提取,内容如对您有帮助,希望把文章链接给更多的朋友!
1、灰度阀值分割
(1)单阈值分割图像
先将一幅彩色图像转换为灰度图像,显示其直方图,参考直方图中灰度的分布,尝试确定阈值;应反复调节阈值的大小,直至二值化的效果最为满意为止。给图像加上零均值的高斯噪声重复上述过程,注意阈值的选择。
(2)多阈值分割图像
自选图像,对图进行多阈值分割,注意阈值的选择。
2.边缘检测
(1)使用Roberts 算子的图像分割实验,调入并显示一幅图像*.gif或*.tif;
使用Roberts 算子对图像进行边缘检测处理;Roberts 算子为一对模板,相应的矩阵为:
rh = [0 1;-1 0]; rv = [1 0;0 -1];
这里的rh 为水平Roberts 算子,rv为垂直Roberts 算子。可以显示处理后
的水平边界和垂直边界检测结果;
用“欧几里德距离”方式计算梯度的模,显示检测结果;对于检测结果进行二值化处理,并显示处理结果。
(2)使用Prewitt 算子的图像分割实验使用Prewitt 算子进行内容(1)中的全部步骤。
(3)使用Sobel 算子的图像分割实验使用Sobel 算子进行内容(1)中的全部步骤。
(4)使用Canny算子进行图像分割实验。
(5) 使用拉普拉斯算子进行图像分割实验。
代码如下:function U() clear; clc; Single_threshold_segmentation() Multi_threshold_segmentation() edge_detection()end% 单阈值分割% 先将一幅彩色图像转换为灰度图像,显示其直方图,% 参考直方图中灰度的分布,尝试确定阈值% 给图像加上零均值的高斯噪声重复上述过程function Single_threshold_segmentation() img = imread('gantrycrane.png'); % 读取图像 figure('Name','单阈值分割'); % 开一个叫单阈值分割的窗口 subplot(2,4,1);imshow(img);title('gantrycrane.png原图'); % 显示原图 img = rgb2gray(img); % 彩色图像转为灰度图像 subplot(2,4,2);imshow(img);title('gantrycrane.png灰度图'); % 显示灰度图 subplot(2,4,3);imhist(img);title('gantrycrane.png直方图'); % 显示直方图 % x = 95; % 分割阈值 % img1 = uint8((0*(img<=x)+255.*(img>x))); % 图像分割 x = graythresh(img); % 分割阈值 img1 = im2bw(img,x); % 图像分割 subplot(2,4,4);imshow(img1);title('gantrycrane.png二值图'); % 显示二值图 img = imnoise(img,'gaussian'); % 添加高斯噪声 subplot(2,4,6);imshow(img);title('gantrycrane.png噪声灰度图'); % 显示噪声灰度图 subplot(2,4,7);imhist(img);title('gantrycrane.png噪声直方图'); % 显示噪声直方图 % x = 95; % 分割阈值 % img1 = uint8((0*(img<=x)+255.*(img>x))); % 图像分割 x = graythresh(img); % 分割阈值 img1 = im2bw(img,x); % 图像分割 subplot(2,4,8);imshow(img1);title('gantrycrane.png噪声二值图'); % 显示噪声二值图end% 多阈值分割function Multi_threshold_segmentation() img = imread('cameraman.tif'); % 读取图像 figure('Name','多阈值分割'); % 开一个叫多阈值分割的窗口 subplot(2,2,1);imshow(img);title('cameraman.tif原图'); % 显示原图 subplot(2,2,2);imhist(img);title('cameraman.tif直方图'); % 显示直方图 x_1 = 77; % 分割阈值 x_2 = 139; img1 = uint8(0*(img<=x_1)+round((x_1+x_2)/2)*((img>x_1)&(img<=x_2))+255*(img>x_2)); % 图像分割 subplot(2,2,3);imshow(img1);title('gantrycrane.png分割图'); % 显示分割图end% 边缘检测% 使用Roberts,Prewitt,Sobel,Canny,拉普拉斯算子function edge_detection() img = imread('cameraman.tif'); % 读取图像 figure('Name','边缘检测'); % 开一个叫边缘检测的窗口 subplot(2,3,1);imshow(img);title('cameraman.tif原图'); % 显示原图 img1 = ed(img,[[0 1;-1 0];[1 0;0 -1]]); % 使用 Roberts 算子 subplot(2,3,2);imshow(img1);title('Roberts 算子'); % Roberts 算子处理图像 img1 = ed(img,[[-1 -1 -1;0 0 0;1 1 1];[-1 0 1;-1 0 1;-1 0 1]]); % 使用 Prewitt 算子 subplot(2,3,3);imshow(img1);title('Prewitt 算子'); % Prewitt 算子处理图像 img1 = ed(img,[[-1 -2 -1;0 0 0;1 2 1];[-1 0 1;-2 0 2;-1 0 1;]]); % 使用 Sobel 算子 subplot(2,3,4);imshow(img1);title('Sobel 算子'); % Sobel 算子处理图像 img1 = ed(img,[[-1 1;-1 1];[-1 -1;1 1]]); % 使用 Canny算子 subplot(2,3,5);imshow(img1);title('Canny算子'); % Canny算子处理图像 img1 = ed(img,[[0 -1 0;-1 4 -1;0 -1 0];[-1 -1 -1;-1 8 -1;-1 -1 -1]]); % 使用 Laplace算子 subplot(2,3,5);imshow(img1);title('Laplace算子'); % Laplace算子处理图像end% 进行卷积和二值化function img2 = ed(img,x) s = size(x); img1 = zeros(size(img)); for i = 1:s(1)/s(2) img1 = img1 + abs(conv2(img,x(1+s(2)*(i-1):s(2)*i,1:s(2)),'same')); end img1 = uint8(img1); img2 = im2bw(img1,graythresh(img1));end结果如下:上一篇:vue项目根据不同环境动态配置接口请求ip及全局变量(vue环境变量配置)(vue调用同一个组件)
下一篇:idea连接SQL Server数据库(idea连接sqlserver数据库教程)
友情链接: 武汉网站建设