[컴퓨터 비전 기초] 최대 커널 클러스터링, Canny 및 기타 에지 필터링 방법을 사용하여 이미지의 가장자리 추출, 이미지의 Harris 코너 특징 추출 및 Voronoi 및 Delaunay 그리드 분할 수행, 최대 Voronoi 분할 표시 커널 클러스터링, 자세한 최대 커널 클러스터링을 위한 계산 알고리즘

 문제 설명은 다음과 같습니다.

  1. Sobel, Prewitt 및 Canny 에지 필터링 방법을 사용하여 색상에서 에지 특징을 추출하고 해당 에지 이미지를 각각 표시합니다.
  2. 요구사항 1의 컬러 영상에서 Harris 코너 특징점을 구하고, 생성된 코너 특징점을 기반으로 요구사항 1에서 생성된 Canny edge 영상에 대해 Delaunay 그리드 분할과 보로노이 그리드 분할을 수행하며, 두 분할은 별도로 표시되어야 한다. 에지 검출 결과 이미지;
  3. 요구사항 2에서 보로노이 그리드 분할의 최대 코어 클러스터링을 달성하기 위한 코드 작성: 보로노이 그리드 분할의 최대 코어 클러스터링 결과를 선택하여 표시하거나 보로노이 그리드 분할 이미지에서 특정 값을 지정 보로노이 각 영역이 코어이고, 여기서 최대 코어 클러스터링을 달성하기 위한 방법은 각 보로노이 그리드를 순회하여 가장 큰 보로노이 그리드를 커널로 선택하여 최대 커널 클러스터를 생성하는 것이다.

구현된 프로그램 코드는 다음과 같습니다. 

clear
clc
%% 1、三种滤波方法提取边缘特征
I=imread('peppers.png');
Igy=rgb2gray(I);
Isob=edge(Igy,'Sobel');
Iprew=edge(Igy,'Prewitt');
Icany=edge(Igy,'Canny');
figure('Name','边缘特征提取','NumberTitle','off')
subplot(221),imshow(I),title('原彩色图像')
subplot(222),imshow(~Isob),title('Sobel滤波器提取边缘')
subplot(223),imshow(~Iprew),title('Prewitt滤波器提取边缘')
subplot(224),imshow(~Icany),title('Canny滤波器提取边缘')
%% 2、德劳内剖分与沃罗诺伊剖分
corns=detectHarrisFeatures(Igy);
corns2=corns.Location;
corns2=double(corns2);
TC=delaunay(corns2(:,1),corns2(:,2));
figure('Name','德劳内与沃罗诺伊','NumberTitle','off')
subplot(121),imshow(~Icany),title('德劳内网格划分'),hold on
triplot(TC,corns2(:,1),corns2(:,2),'b-')
subplot(122),imshow(~Icany),title('沃罗诺伊网格划分'),hold on
voronoi(corns2(:,1),corns2(:,2),'r'),hold on
 
%% 3、最大核聚类
[v,p]=voronoin(corns2);#得到voronoi网格顶点的坐标矩阵和voronoi网格顶点的坐标矩阵中的行索引的单元数组
for i=1:length(p)
chdu(i)=length(p{i,1});
end
chadu=chdu';
[z,wz]=max(chadu);
figure('Name','最大核聚类','NumberTitle','off')
imshow(~Icany),hold on
suoyin=p{wz,1};
julei=v(suoyin,:);
jleix=[julei(:,1)' julei(1,1)];
jleiy=[julei(:,2)' julei(1,2)];
m=1;
for i=1:length(p)#挑选与最大核相连的沃罗诺伊网格
    A=p{i,1};
    for k=1:length(suoyin)
        B=find(A==suoyin(k));
        if isempty(B)==0
            jlyuan{m,1}=A;
            m=m+1;
        end
    end
end
for i=1:length(jlyuan)
    ljieyb=v(jlyuan{i,1},:);
    patch(ljieyb(:,1),ljieyb(:,2),'y'),hold on
end
plot(jleix,jleiy,'Color','c','LineWidth',3)
patch(jleix,jleiy,'m'),hold on
voronoi(corns2(:,1),corns2(:,2),'r'),hold on
plot(corns2(wz,1),corns2(wz,2),'b'),hold on

프로그램 알고리즘의 원리는 다음과 같습니다.

  1. 먼저 rgb2gray 함수를 사용하여 컬러 이미지를 그레이 스케일 이미지로 변환한 다음, edge 함수를 사용하여 그레이 이미지의 에지 특징을 추출하고, 먼저 edge 함수의 파라미터 방법을 'Sobel'로 설정하고, 얻어진 획득한 에지 이미지를 'Prewitt'와 'Canny'로 각각 설정하고, Prewitt와 Canny 필터링 방법을 통해 이미지의 에지 특징을 추출한 에지 이미지를 획득하고, 마지막으로 imshow 함수를 사용하여 얻은 각 가장자리 이미지의 네거티브를 표시합니다. 네거티브 이미지가 더 선명하게 보입니다. 실험 요약에서 테스트 결과의 차이점을 분석하겠습니다.
  2. 그레이스케일 이미지에서 detectHarrisFeatures 함수를 사용하여 1 단계에서 Harris 방법을 사용하여 계산한 컬러 이미지의 이미지 모서리를 얻은 다음 delaunay 함수를 사용하여 이미지의 Harri 모서리에 대한 2D Delaunay 삼각분할을 만듭니다. imshow 함수는 1 단계에서 Canny 에지 이미지의 네거티브 이미지를 표시하고 유지 명령을 사용하여 유지한 다음 함수 triplot을 사용하여 Delaunay 삼각 분할을 표시하여 에지 이미지에서 Delaunay 메쉬 분할을 얻습니다. 그런 다음 voronoi 함수를 사용하여 Harris를 변환합니다 . 코너 포인트의 Voronoi 메쉬는 Canny 에지 이미지에 플로팅되어 에지 이미지에서 Voronoi 메쉬 분할을 얻습니다. 결과의 분석은 실험 요약에서 설명될 것이다.
  3. 먼저 voronoin 함수(자세한 내용은 matlab 명령 창에 doc+voronoin을 입력하십시오. voronoin 함수는 voronoi와 다릅니다)를 사용하여 이미지 Harris의 꼭지점에 대한 보로노이 격자 정점의 좌표 행렬을 구하고 저장합니다. 보로노이 내 모든 보로노이 셀의 모든 보로노이 정점 그리드 정점의 좌표 행렬에서 행 인덱스의 셀 배열, 셀은 보로노이 그리드이며, 셀을 코어로 하는 클러스터의 크기는 숫자에 의해 결정될 수 있음 보로노이 꼭지점의 개수도 모서리의 개수와 일치하므로 셀 의 보로노이 꼭지점 인덱스 개수 , 즉 셀 배열에 저장된 행 인덱스 배열의 길이를 사용해야 합니다. 특정 셀의 클러스터링을 코어 크기로 결정한 다음 가장 큰 코어 클러스터의 코어를 찾으려면 단위 배열을 직접 탐색하여 각 행 인덱스 배열의 길이를 계산한 다음 최대 함수를 사용하여 다음을 얻습니다. 단위 배열에서 길이가 가장 큰 행 인덱스 배열의 위치를 ​​사용하여 위치는 셀 배열에서 이 행 인덱스 배열을 읽고, 이 행 인덱스 배열은 가장 큰 커널 클러스터링의 커널의 모든 보로노이 , 그런 다음 행 인덱스 배열을 사용하여 보로노이 그리드 정점을 저장하는 좌표 행렬을 읽습니다. 가장 큰 핵 클러스터링의 핵의 모든 보로노이 . 지금까지 가장 큰 핵 클러스터링의 핵에 해당하는 셀은 이미지의 Voronoi 그리드 분할에서 찾은 다음 위의 유사한 방법을 사용하여 가장 큰 핵 클러스터에 있는 셀은 반드시 보로노이 꼭지점 과 핵 보로노이가 있습니다.꼭지점은 동일합니다. 즉, 가장 큰 핵 클러스터링의 모든 셀의 보로 노이 꼭지점의 행 인덱스 배열에서 코어의 보로노이 꼭지점의 행 인덱스 배열 에 요소가 있을 것이므로 셀을 순회합니다. Voronoi 정점 배열의 행 인덱스 배열을 저장하고 , 가장 큰 핵 클러스터링의 코어를 포함하는 의 모든 행 인덱스 배열 요소의 행 인덱스 배열을보로노이 . 보로노이 그리드의 꼭지점을 저장하는 좌표 행렬에 클러스터링 이미지의 모든 보로노이 꼭지점의 좌표 이므로 전체 최대 핵 클러스터링을 잠그고 마지막으로 imshow 함수를 사용하여 Canny 에지 이미지를 표시하고 유지한 다음 patch함수는 최대 군집에서 모든 세포의 보로노이 정점을 얻기 위해 사용된다. 좌표는 최대 핵군집 영역의 색상을 변경하여 최대 핵군집을 표시한 다음 패치 함수를 사용하여 코어의 보로노이 핵에 해당하는 세포의 색상을 변경하여 최대 핵 클러스터링 코어를 표시합니다.

프로그램 실행 결과는 다음과 같습니다.

1. 에지 특징 추출을 위한 3가지 필터링 방법

2. 들로네 분할과 보로노이 분할

 3. 보로노이 최대 커널 클러스터링

 최대 커널 클러스터링 알고리즘은 더 복잡하고 알고리즘 원리에 대한 설명이 더 자세합니다.동시 실행 프로그램을주의 깊게 읽고 matlab의 도움말 창을 사용하여 알고리즘 원리 또는 변수를 통해 일부 속성에 대한 설명을 찾으십시오. 이 변수들의 속성을 보세요, 알고리즘은 모든 이미지에 적용되며, 한 이미지의 최대 커널 클러스터링을 계산하여 보로노이 파티션에 표시할 수 있습니다. (Matlab 도움말 창 사용: doc+함수 이름. 더 자세한 사용법 소개를 얻을 수 있습니다.) 다른 질문이 있으면 메시지를 남기거나 블로거에게 개인 메시지를 보내주십시오.

 블로거에게 좋아요를 주는 것을 잊지 마세요!

블로거를 팔로우하고 컴퓨터 비전 및 이미지 처리에 대해 자세히 알아보십시오!

원본 콘텐츠는 무단으로 복제할 수 없습니다!

최대 커널 클러스터링 알고리즘은 블로거의 원래 방법에 속합니다. 

추천

출처blog.csdn.net/qq_59049513/article/details/122557631