【图像处理】Matlab图像边缘检测与直线提取

发布于:2024-02-25 ⋅ 阅读:(87) ⋅ 点赞:(0)

1、问题描述:        

        使用Matlab图像边缘检测和直线提取。通过选取感兴趣区域,用户可以选择需要处理的图像部分。随后,对选取的区域进行亮度调整、直方图均衡化和自适应直方图均衡化等预处理操作,以增强图像的细节和对比度。

         然后,将预处理后的图像转换为灰度图像,并使用Sobel算子进行边缘检测。最后,利用霍夫变换方法从边缘图像中提取直线信息,并将检测到的直线绘制在原图像上,以帮助用户分析图像中的线条结构。

2、图片素材:

       

 3、Matlab代码:

% 清空命令窗口和工作区变量
clear;
clc;

% 读取图片
src = imread('0.jpg');

% 获取图像的大小信息
[m, n, z] = size(src);

% 显示原图像
figure(1)
imshow(src)

% 选取感兴趣区域
h=imrect;

% 获取选取区域的位置信息
pos=getPosition(h);

% 拷贝选取图片
imCp = imcrop( src, pos );

% 在新的窗口显示选取的图片
figure(2)
imshow(imCp);

% 将 RGB 图像转换成 LAB 颜色空间
shadow_lab = rgb2lab(imCp);

% 对亮度进行调整
max_luminosity = 100;
L = shadow_lab(:,:,1)/max_luminosity;
shadow_imadjust = shadow_lab;
shadow_imadjust(:,:,1) = imadjust(L)*max_luminosity;
shadow_imadjust = lab2rgb(shadow_imadjust);

% 对亮度进行直方图均衡化
shadow_histeq = shadow_lab;
shadow_histeq(:,:,1) = histeq(L)*max_luminosity;
shadow_histeq = lab2rgb(shadow_histeq);

% 对亮度进行自适应直方图均衡化
shadow_adapthisteq = shadow_lab;
shadow_adapthisteq(:,:,1) = adapthisteq(L)*max_luminosity;
shadow_adapthisteq = lab2rgb(shadow_adapthisteq);

% 将选取的图片转换为灰度图像
im=rgb2gray(shadow_adapthisteq);
% im=imadjust(imCp);
imshow(im)

% 对灰度图像进行边缘检测
Ibw=edge(im,'Sobel',0.05);
figure
imshow(Ibw,[])

% 对边缘图像进行霍夫变换,获取直线信息
[H,theta,rho]=hough(Ibw,'ThetaResolution',0.2);
peaks=houghpeaks(H,100);
lines=houghlines(im,theta,rho,peaks);

% 在图片上绘制检测到的直线
figure
imshow(im)
hold on
for k=1:length(lines)
xy=[lines(k).point1;lines(k).point2];
plot(xy(:,1),xy(:,2))
end


网站公告

今日签到

点亮在社区的每一天
去签到