이 사진에는 몇 개의 도형이 있습니까?


10

아이들은 물건을 분류하고 세는 데 능숙합니다. 컴퓨터가 더 문제가있는 것 같습니다. 이것은이 문제의 단순화 된 버전입니다. 이미지에서 객체를 분류하고 계산할 수있는 작은 프로그램을 작성할 수 있습니까?

문제 : 하나 이상의 원과 사각형을 포함하는 이미지가 주어지면 원 수와 사각형 수를 가진 2 개의 정수를 반환하십시오.

규칙

  • 입력 이미지는 선택한 비트 맵 형식의 흰색 배경에 검은 색 그림이됩니다.
  • 이미지 너비와 높이는 100에서 1000 픽셀 사이입니다.
  • 그림은 그림 안에 완전히 포함됩니다.
  • 그림의 너비는 1 픽셀입니다.
  • 이미지는 앤티 앨리어싱을 사용하지 않습니다. 그들은 흰색에만 검은 색이 될 것입니다.
  • 그림은 다른 그림과 접촉하거나 교차하거나 내부에있을 수 있습니다.
  • 교차 그림에는 최대 4 개의 공통 픽셀이 있습니다.
  • 원의 지름은 20 픽셀 이상입니다.
  • 직사각형면의 길이는 10 픽셀 이상입니다.
  • 셰이프를 인식하는 내장 라이브러리 나 라이브러리 또는이 문제를 사소하게 만드는 다른 기능을 사용할 수 없습니다.
  • 원과 사각형의 개수를 가진 정수 2 개를 반환하거나 인쇄합니다.

실시 예 1

실시 예 1

답 : 3 4

예 2 :

여기에 이미지 설명을 입력하십시오

답 : 4 13

이것은 코드 골프 도전이므로 각 언어에서 가장 짧은 프로그램이나 기능이 이길 것입니다.


사각형을 세는 것은 모서리를 세는 것에 관한 것입니다.
Bálint

답변:


3

PHP – 355 바이트

바이트 수에는 포함되지 않습니다 '<image-url>'.

<?php
m('<image-url>');function m($f){$i=imagecreatefrompng($f);$r=f($i,17);$c=f($i,9);echo($c-$r).' '.$r."\n";}function f($i,$k){$w=imagesx($i);$h=imagesy($i);$r=0;for($y=0;$y<$h;$y++)for($x=0;$x<$w;$x++)if(!imagecolorat($i,$x,$y))$r+=g($i,$x,$y,$w,$k);return$r;}function g($i,&$x,$y,$w,$k){$l=$x;while(!imagecolorat($i,$x,$y)&&$x<$w)$x++;return($x-$l>$k)?1/2:0;}

두 가지 테스트 사례에서 사용한 URL은 http://i.stack.imgur.com/qnIFk.pnghttp://i.stack.imgur.com/HV9k3.png입니다.

수평선을 세고 모양의 수를 얻기 위해 2로 나눕니다. 원의 가로 선분이 짧고 직사각형의 가로 선분이 길다는 관찰에 의존합니다.

테스트 케이스 이외의 다른 용도로는 작동하지 않을 수 있습니다.

이미지를 ± 45 ° 회전시켜 수평선을 감지하려고했습니다. 이것은 대각선을 확인하는 것과 같으며 원을 더 잘 집어 들지만 충분한 가장자리를 깨끗하게 유지하는 보간 알고리즘을 찾을 수 없습니다. 예를 들어 두 줄의 픽셀로 선을 번지거나 수를 엉망으로 만들 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.