디지털 이미지 처리: 실험 6 이미지 분할

실험 6 이미지 분할

데이터 분할은 영상 처리부터 영상 분석까지의 핵심 단계로 영상 인식과 컴퓨터 비전을 위한 필수 전처리 과정으로, 영상 분할 후 추출된 객체는 영상 인식, 특징 추출, 영상 검색 등 다양한 분야에 활용될 수 있다. 영상 분할의 기본 전략은 주로 영상 회색 값의 두 가지 특성인 회색 불연속성과 회색 유사도를 기반으로 하므로 영상 분할 방법은 에지 기반 분할 방법과 영역 기반 분할 방법으로 나눌 수 있습니다. 이 실험은 간단한 이미지 분할을 완성함으로써 이미지 분할에 대한 이해를 더욱 심화시킵니다.

1. 실험 목적

MATLAB 프로그램 설계 방법을 더 마스터하고,
이미지 분할 이론과 방법을 통합하고,
이미지 분할을 프로그램하고, 임계값 기반 분할 방법과 에지 기반 분할 방법의 효과를 비교하고, 분할 효과에 영향을 미치는 요인을 분석합니다.

2. 실험적 근거

1.基于阈值的分割
基于阈值的分割属于区域分割的一种,是图像分割中最常用的一类方法,对于一个具有双峰分布的简单图像阈值分割方法,实际上是将输入图像f(i,j)通过变换得到输出图像g(i,j)的过程,即二值化过程。
阈值分割方法的关键是阈值T的确定,如果能确定一个合适的阈值,就可以准确地将图像分割开来,对于灰度直方图具有双峰分布的图像。可以选择古典处的灰度值作为阈值,在许多情况下物体和背景的对比度在图像中的各处是不同的,很难用一个统一的阈值将物体与背景分开。此时可以根据图像的局部特征分别采用不同的阈值进行分割。并分割的方法包括判断分析法,最佳熵自动阈值法,最小误差分割等。
阈值分割的优点是直观计算简单,运算效率较高,速度快。

2.基于边缘的分割
图像分割的另一种方式是通过边缘检测时限的边缘是指通过中像素灰度有阶跃或屋顶变化的像素级和边缘能勾画出物体轮廓,对图像识别和分析十分有用,是图像识别时提取的重要信息,由于边缘处的灰度是不连续的,因此可以利用边缘检测算子将边缘点检测出来,常用的边缘检测算子有梯度算子、Prewitt算子、Sobel算子、LOG算子和Canny算子等。
通过edge函数可以利用各种边缘检测算子检测图像边缘。

3.边缘跟踪
将检测的边缘点连接成线称为边缘跟踪,在识别图像中的目标时,往往需要对目标边缘做跟踪处理,即按一定顺序找出边缘点来绘制出编辑,如果图像是二值图像或图像中不同区域具有不同的像素值,但每个区域内的像素只是相同的,则可以完成基于四联通或八连通区域的轮廓跟踪。
利用bwtraceboundary函数可以在二值图像中追踪目标的轮廓线。

4.Hough变换检测
Hough变换是Paul Hough于1962年提出,是图像处理技术中用于识别几何形状的一种常用方法,它实现了一种从图像空间到参数空间的映射关系。Hough变换的基本原理是利用点线间的对偶性,将原始图像空间的给定曲线通过曲线表达形式变换成为参数空间的一个点。
MATLAB中常用的关于Hough变换的函数有:hough、houghpeaks和houghline。

3. 실험기구 및 장비

컴퓨터, Matlab 이미지 처리 소프트웨어, 처리할 이미지

4. 실험적인 콘텐츠 및 단계

  1. MATLAB의 관련 기능에 익숙하고 각 기능의 특정 사용법을 마스터합니다.
(1)edge:边缘检测函数。
BW = edge(I)
采用灰度或一个二值化图像I作为它的输入,并返回一个与I相同大小的二值化图像BW,在函数检测到边缘的地方为1,其他地方为0。
BW = edge(I,'sobel') 自动选择阈值用Sobel算子进行边缘检测。
BW = edge(I,'sobel',thresh) 根据所指定的敏感度阈值thresh,用Sobel算子进行边缘检测,它忽略了所有小于阈值的边缘。当thresh为空时,自动选择阈值。
BW = edge(I,'sobel',thresh,direction) 根据所指定的敏感度阈值thresh,在所指定的方向direction上,用Sobel 算子进行边缘检测。Direction可取的字符串值为horizontal(水平方向)、vertical(垂直方向)或both(两个方向)。
[BW,thresh] = edge(I,'sobel',...) 返回阈值
(2)graythresh:利用Otsu算法(最大类间方差)获取全局阈值。
(3)im2bw:将灰度影像转换为二值图像。
(4)bwtraceboundary:在二值图像中追踪目标轮廓线。

도움말 bwtraceboundary
bwtraceboundary 이진 이미지의 추적 개체입니다.
B = bwtraceboundary(BW,P,FSTEP) 는 0이 아닌 픽셀이 객체에 속하고 0 픽셀이 배경을 구성하는 이진 영상 BW에서 객체의 윤곽선을 추적합니다. P는 객체 경계에 있는 초기 점의 행 및 열 좌표를 지정하는 요소를 2개 가진 벡터입니다. FSTEP은 P에 연결된 다음 개체 픽셀에 대한 초기 검색 방향을 지정하는 문자열 또는 문자 벡터입니다. FSTEP은 'N','NE','E','SE',' 문자열 또는 문자 벡터 중 하나일 수 있습니다. S','SW','W','NW', 여기서 N은 북쪽, NE는 북동쪽 등을 나타냅니다. B는 Qx2 행렬이며 여기서 Q는 해당 지역의 경계 픽셀 수입니다. B는 경계 픽셀의 행 및 열 좌표를 보유합니다.
B = bwtraceboundary(BW,P,FSTEP,CONN)은 경계를 추적할 때 사용할 연결을 지정합니다. CONN은 8 또는 4일 수 있습니다. CONN의 기본값은 8입니다. CONN이 4인 경우 FSTEP은 'N','E','S' 및 'W'로 제한됩니다.
B = bwtraceboundary(…,N,DIR) 은 추출할 최대 경계 픽셀 수 N과 경계를 추적할 방향 DIR을 지정하는 옵션을 제공합니다. DIR은 '시계 방향' 또는 '시계 반대 방향'일 수 있습니다. 기본적으로 또는 N이 Inf로 설정된 경우 알고리즘은 경계에서 모든 픽셀을 추출하고 DIR이 지정되지 않은 경우 시계 방향으로 검색합니다.

(5)hough:Hough变换函数。
1.hought函数
语法:[H, theta, rho] = hough(BW)
      [H, theta, rho] = hough(BW, ParameterName, ParameterValue)
描述:[H, theta, rho] = hough(BW)计算二值图像BW的标准hough变换。函数返回的H称为hough转换矩阵。theta和rho是一维数组,theta记录径,rho记录角度。BW可以是逻辑型,也可以是数值型。
(6)houghpeaks:Hough变换峰值识别。
peaks = houghpeaks(H, NumPeaks) 
peaks = houghpeaks(..., 'Threshold', val1, 'NHoodSize', val2) 
其中,"…"指出来自默认语法和peaks的输入是持有峰值行和列坐标的Q×2大小的矩阵。Q的范围是0到NumPeaks,H是霍夫变换矩阵。参数val1是非负的标量,指定了H中的什么值被考虑为峰值;val1可以从0到Inf变化,默认值是0.5*max(H(:))。参数val2是奇整数的两元素矢量,指定量围绕峰值的邻域大小。
(7)houghline:基于Hough变换提取线元。
lines = houghlines(f, theta, rho, peaks) 
lines = houghlines(..., 'FillGap', val1, 'MinLength', val2)
其中,theta和rho是来自函数hough的输出,peaks是函数houghpeaks的输出。输出lines是结构数组(可能检测到多条直线),长度等于找到的线段数。结构中的每个元素可以看成一条线,并含有下列字段:
point1:两元素向量[r1, c1],指定了线段起点的行列坐标。
point2:两元素向量[r2, c2],指定了线段终点的行列坐标。
theta:与线相关的霍夫变换的以度计量的角度。
rho:与线相关的霍夫变换的ρ轴位置。
其他参数如下:
val1是正的标量,指定了与相同的霍夫变换相关的两条线段的距离。当两条线段之间的距离小于指定的值时,函数houghlines把线段合并为一条线段(默认的距离是20个像素)。参数val2是正的标量,指定合并的线是保留还是丢弃。如果合并的线比val2指定的值短,就丢弃(默认值是40)。
  1. 단순 영상의 임계값 분할
    (1) 히스토그램을 이용한 임계값 분할
    여기에 이미지 설명 삽입
    여기에 이미지 설명 삽입

그림 1 임계값 분할
(2) 클래스 간 최대 분산을 사용하여 분할 임계값을 자동으로 결정
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

그림 2 클래스 간 최대 분산
3. 에지 기반 임계값 분할
(1) 다양한 에지 감지 연산자를 사용하여 에지 감지
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

그림 3 에지 운영자
사고: 서로 다른 것을 비교

Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。

Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,sobel算子对边缘定位不是很准确,图像的边缘不止一个像素。

Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好。但边缘较宽,而且间断点多。

Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。

Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。

(2) 에지 추적(bwtraceboundary) 기능
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

그림 4 에지 추적

思考:通过修改起始点的横纵坐标,可以改变找到的硬币边缘。
  1. 허프 변환 감지 라인 세그먼트
clc;clear;
i=imread('circuit.tif');
i1=imrotate(i,30,'crop');%用crop方式显示,旋转后的图像跟原图像大小一样,多余的地方舍去
bw=edge(i1,'canny');
subplot(2,3,1);imshow(i);xlabel('原始图像');
subplot(2,3,2);imshow(i1);xlabel('旋转后的图像');
subplot(2,3,3);imshow(bw);xlabel('边缘检测图像');
[H,theta,rho] = hough(bw);%利用hough函数进行hough变换
subplot(2,3,4);hold on;imshow(imadjust(mat2gray(H)),[],'XData',theta,'YData',rho,'Initialmagnification','fit');
title('峰值检测');
xlabel('\theta(degrees)');ylabel('\rho');
axis on,axis normal,hold on
P=houghpeaks(H,10,'threshold',ceil(0.3*max(H(:))));
x=theta(P(:,2));
y=rho(P(:,1));
plot(x,y,'s','color','red');
lines=houghlines(bw,theta,rho,P,'FillGap',5,'MinLength',7);
subplot(2,3,5),imshow(i1);title('检测到的线段');hold on;
max_len=0;
for k=1:length(lines)
    xy=[lines(k).point1;lines(k).point2];
    plot(xy(:,1),xy(:,2),'LineWidth',2,'color','green');
    %绘制线段起终点
    plot(xy(1,1),xy(1,2),'LineWidth',2,'color','yellow');
    plot(xy(2,1),xy(2,2),'LineWidth',2,'color','blue');
    %确定最长线段的端点
    len=norm(lines(k).point1-lines(k).point2);
    if(len>max_len)
        max_len=len;
        xy_long=xy;
    end
end
%突出显示最长一条直线
plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'color','red');

여기에 이미지 설명 삽입

그림 5 허프 변환

5. 실험 경험

  1. 이미지 분할은 이미지 처리의 중요한 단계 중 하나이며 알고리즘은 이미지 분할 과정의 주요 방법 중 하나이지만 각 알고리즘은 고유한 특성을 가지고 있으며 연산 결과도 매우 다릅니다.
  2. 실험에서 알고리즘의 프로그래밍에는 항상 다양한 실수가 있으며 실수는 신중한 검사와 환자 수정 후에 수정됩니다. 유형은 크게 구문 오류, 함수 호출 및 호출할 수 없는 오류 함수로 나눌 수 있습니다.

Supongo que te gusta

Origin blog.csdn.net/chengzilhc/article/details/124556845
Recomendado
Clasificación