원 기반 골격 화 데모

Dec 03 2020

골격 화 (또는 중간 축 변환)는 영역의 "중간"축 (마스크로 표시됨)을 찾는 프로세스입니다. 그것은 SkeletonTransform"프론티어"가 만날 때까지 마스크를 얇게 만들어 작동하는 것처럼 보이는에 의해 수행되며 , 여기서 그들이 내 축을 정의합니다.

성장하는 원을 기반으로하는 또 다른 방법이 있는데, 이것이 제 관심사입니다.

이 말 머리 가면을 고려하십시오.

마스크 경계에 양 접하는 작은 빨간색 원으로 시작한다고 가정합니다 (즉, 아래에 표시된 것처럼 적어도 두 지점에서 마스크 경계에 닿음).

이 대체 방법은 원의 반지름을 점진적으로 늘리고이 양방향 접선 조건을 유지하기 위해 새 중심의 위치를 ​​자동으로 조정합니다.

위의 예제 이미지는 일부 후보 원 중심을 선택하고 두 개 이상의 점이 마스크 경계에 닿을 때까지 반경을 늘리는 것을 기반으로 한 핵 ... 괴물 ...입니다.

이 프로세스를 적절하고 알고리즘 적으로 수행하고 싶습니다.

내 일반적인 접근 방식은 현재 가장 큰 원을 가져 와서 반경을 조금씩 (예 : 1 픽셀 씩) 늘린 다음, 이중 접선을 유지하는 현재 가장 큰 원의 중심에 가장 가까운 원 중심을 검색하는 것이 었습니다. Mathematica 에는 효율적인 코드를 만들 수 있는 영리한 영역 기반 프리미티브가 있다고 생각 하지만 아쉽게도 영역 기반 계산에 충분히 익숙하지 않습니다. 또한과 같은 기능 RegionMemberQ은 양방향 접선에 직접 대응하지 않습니다.

궁극적으로 위의 클러 지처럼 원과 중심을 연결하는 관련 선을 색칠하고 싶습니다.


RidgeFilter(나에게 새로운)에 대한 @bills의 제안이 정말 도움이되었습니다!

임계 값 등을 미세 조정하면됩니다.

답변

2 bills Dec 03 2020 at 06:48

찾고있는 모든 것을 제공하지는 않지만 :

img = Import["https://i.stack.imgur.com/zV7QC.png"];
RidgeFilter[DistanceTransform[img],0.5] // ImageAdjust

이것은 원의 중심이되어야하는 능선입니다. 반지름은이 중심에서 거리 변환 이미지의 값입니다.