중요한 점은 원본 이미지의 두꺼운 선이 Hough Transform의 더 넓은 봉우리로 변환된다는 것입니다. 이 이미지는 얇고 두꺼운 선의 피크를 보여줍니다.
당신은 함께 그룹에 각 피크의 모든 픽셀/누적 쓰레기통을 당신이 좋아하는 어떤 전략을 사용할 수 있습니다. multithresh 및 imquantize을 사용하여 BW 이미지로 변환 한 다음 bwlabel으로 연결하여 연결된 구성 요소에 레이블을 지정하는 것이 좋습니다. 또한 다른 여러 클러스터링/분할 전략을 사용할 수 있습니다. 잠재적으로 까다로운 부분은 적절한 임계 값 수준을 파악하는 것입니다. 응용 프로그램에 적합한 것을 얻을 수 없다면 나중에 너무 잘못된 픽셀을 제거 할 수 있기 때문에 너무 많이 포함하는 편이 낫습니다. 여기
는 임계 (왼쪽) 및 라벨 (오른쪽)
는 피크 영역이되면, 원본 이미지의 픽셀 어떤 알 수 기여한 후의 변환 허프의 피크이다 hough_bin_pixels
을 사용하여 각 축전지 빈에 연결하십시오. 그런 다음 각 피크 영역에 대해 영역의 일부인 모든 저장소에 대해 hough_bin_pixels
의 결과를 결합하십시오.여기
내가 샘플 이미지를 만들어 함께 던졌다 코드입니다. 난 잠시 동안 그것을 사용하지 않으면 그냥 다시 matlab에지고있어, 그러니 제발 부주의 코드를 용서하십시오.
% Create an image
image = zeros(100,100);
for i = 10:90
image(100-i,i)=1;
end;
image(10:90, 30:35) = 1;
figure, imshow(image); % Fig. 1 -- Original Image
% Hough Transform
[H, theta_vals, rho_vals] = hough(image);
figure, imshow(mat2gray(H)); % Fig. 2 -- Hough Transform
% Thresholding
thresh = multithresh(H,4);
q_image = imquantize(H, thresh);
q_image(q_image < 4) = 0;
q_image(q_image > 0) = 1;
figure, imshow(q_image) % Fig. 3 -- Thresholded Peaks
% Label connected components
L = bwlabel(q_image);
figure, imshow(label2rgb(L, prism)) % Fig. 4 -- Labeled peaks
% Reconstruct the lines
[r, c] = find(L(:,:)==1);
segmented_im = hough_bin_pixels(image, theta_vals, rho_vals, [r(1) c(1)]);
for i = 1:size(r(:))
seg_part = hough_bin_pixels(image, theta_vals, rho_vals, [r(i) c(i)]);
segmented_im(seg_part==1) = 1;
end
region1 = segmented_im;
[r, c] = find(L(:,:)==2);
segmented_im = hough_bin_pixels(image, theta_vals, rho_vals, [r(1) c(1)]);
for i = 1:size(r(:))
seg_part = hough_bin_pixels(image, theta_vals, rho_vals, [r(i) c(i)]);
segmented_im(seg_part==1) = 1;
end
region2 = segmented_im;
figure, imshow([region1 ones(100, 1) region2]) % Fig. 5 -- Segmented lines
% Overlay and display
out = cat(3, image, region1, region2);
figure, imshow(out); % Fig. 6 -- For fun, both regions overlaid on original image
실제로 이것은 정말 멋진 아이디어였습니다. 선들이 실제로 길이가 다르다면 문제가 있습니다. 임계 접근법은 전역 적 최대치만큼 높지 않은 지역의 Hough maxima (작은 선들에 해당)를 가릴 수 있습니다. 나는 여전히 그것에 대해 연구 중이다. 그러나 그렇지 않으면 이것이 좋은 접근법이다! 고맙습니다! – Honeybear
미래에이 답변을 참조하는 사람은 임계 변환 문제를 해결할 수있는 좋은 방법은 평균 변환을 사용하여 Hough Transform에서 로컬 최대 값을 찾는 것입니다. –
안녕하세요 @ Honeybear이 답변으로 질문에 대한 답변을 얻으려면 [수락] (https://meta.stackexchange.com/q/5234/179419)을 클릭하여 확인하십시오. 이는 해결책을 찾았으며 응답자와 자신에게 어느 정도의 평판을 제공한다는 것을 더 넓은 커뮤니티에 나타냅니다. 이를 수행 할 의무는 없습니다. –