赞
踩
使用Matlab图像边缘检测和直线提取。通过选取感兴趣区域,用户可以选择需要处理的图像部分。随后,对选取的区域进行亮度调整、直方图均衡化和自适应直方图均衡化等预处理操作,以增强图像的细节和对比度。
然后,将预处理后的图像转换为灰度图像,并使用Sobel算子进行边缘检测。最后,利用霍夫变换方法从边缘图像中提取直线信息,并将检测到的直线绘制在原图像上,以帮助用户分析图像中的线条结构。
- % 清空命令窗口和工作区变量
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。