이미지를 이진화 처리한다. 또한 두 영역 사이의 최단 거리를 계산할 수 있습니다 (Ver1.1).
소개
이번은, 전회 기사 2영역간의 최단 거리를 요구하는 프로그램에 대해서, 수정을 실시한 내용입니다.
이전에는, 화상 사이즈를 그대로 처리하고 있었던 것과, 반드시 2 영역간의 최단 거리를 구할 수 없었던 과제가 있었습니다.
이미지를 이진화 처리한다. 또한 두 영역 사이의 최단 거리를 계산할 수 있습니다.
htps : // 코 m / 후미오 에이 씨 / ms / 05, 6506, 8c88d89 49
요점은 아래와 같습니다.
이미지를 줄이고 처리하기 쉽습니다.
이번은 이쪽의 불고기 화상을 이용해 두 개의 고기의 최단 거리를 요구하고 싶습니다.
이전의 기사에서는 그대로의 화상 사이즈로 처리를 실시하고 있었습니다. 이 경우, 화상 사이즈가 커지면 영역을 둘러싸는 처리가 무거워져 버립니다. 따라서 이미지 크기를 줄이고 처리하기 쉽습니다.
이번에는 폭을 300픽셀로 고정하여 같은 종횡비(폭:높이비)로 축소시킵니다.
img.ipynb
def scale_to_width(img, width):
scale = width / img.shape[1]
return cv2.resize(img, dsize=None, fx=scale, fy=scale)
img = scale_to_width(img, 300)#300ピクセルに固定
이미지를 이진화
다음으로, 이진화에 의해 고기 부분만을 색을 추출하고 싶습니다. cv2.inRange 메소드에 의해 특정의 색을 흰색, 특정의 색을 검정으로 합니다.
img.ipynb
import numpy as np
bgrLower = np.array([0, 0, 130]) # 抽出する色の下限(BGR)
bgrUpper = np.array([120,120, 255]) # 抽出する色の上限(BGR)
img_mask = cv2.inRange(img, bgrLower, bgrUpper)
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(1,1,1)
ax.imshow(img_mask)
ax.axis("off")
굉장히 고기만 하얗게 표시시킬 수 있었습니다. 다만, 이것은 원래 이미지의 그늘에 의해 수동으로 추출하는 색을 조정할 필요가 있기 때문에 번거롭게 됩니다. 이 표시시키고 싶은 색만을 추출해 이진화시키는 수법은, 별도 정리하고 싶습니다.
영역 사이의 거리를 구하고 거기에서 최단 거리를 찾습니다.
다음에, 영역간의 거리를 구합니다. 전회는, 각 영역의 x좌표 최대치/최소치를 취하는 좌표를 취득시키고 나서 거리를 구했습니다. 그러나, 그 구하는 방법은 반드시 최단 거리를 취할 수 있는 것은 아닙니다(하우 그림의 예).
대책으로서는, 각 영역을 둘러싸는 점통의 조합에 의한 거리를 모두 구해, 그것이 최소치를 취하는 좌표를 취득하는 것입니다.
이 때, 화상 사이즈를 조정하지 않으면 상당히 계산수가 커지기 때문에, 이전에 나타낸 화상 사이즈를 축소화시키는 것이 효과적입니다.
img.ipynb
import numpy as np
dd=np.array([300])#空白の配列だとif min(dd)> dでエラーが出るため
for i in range(len(contours[0])):
x3 = contours[0][i][0][0]
y3 = contours[0][i][0][1]
for ii in range (len(contours[1])):
x4 = contours[1][ii][0][0]
y4 = contours[1][ii][0][1]
d = get_distance(x3, y3, x4, y4)
if min(dd) > d:
x3min =x3
y3min =y3
x4min =x4
y4min =y4
dd = np.append(dd,d)
26.248809496813376
무사히 최단 거리를 구할 수 있었습니다.
결론
이미지 파일을 줄이는 것만으로 처리가 꽤 빨라졌습니다. 한편, 색의 추출은 수동으로 실시하기 때문에, 여기는 개선의 여지가 있습니다. 2치화하고 싶은 곳만 자유자재로 나눌 수 있는 개조를 검토하고 싶습니다.
간단하지만 개선했으므로, 아래에 격납하고 있습니다 (날짜가 새로운 것이 버전 업 한 것입니다).
Reference
이 문제에 관하여(이미지를 이진화 처리한다. 또한 두 영역 사이의 최단 거리를 계산할 수 있습니다 (Ver1.1).), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Fumio-eisan/items/10c54af7a925b403f59f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(이미지를 이진화 처리한다. 또한 두 영역 사이의 최단 거리를 계산할 수 있습니다 (Ver1.1).), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Fumio-eisan/items/10c54af7a925b403f59f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)