당신의 임무는 입력 이미지를 가지고 가장자리 감지를 통해 출력 이미지가되도록 프로그램을 작성하는 것입니다.
가장자리 감지는 다음과 같이 작동합니다 (확실하지 않은 경우 sobel 가장자리 감지 참조 ).
- 픽셀의 값은 픽셀의 총 밝기이므로, 컬러 인 경우 먼저 그레이 스케일로 변환해야합니다 (단순하고 골프를 치기 위해 R, G 및 비).
- 픽셀 p (i, j)에 대한 G x 및 G y 의 공식 은 다음과 같습니다.
- G x = -1 * p (i-1, j-1) -2 * p (i-1, j) -1 * p (i-1, j + 1) + 1 * p (i + 1, j -1) + 2 * p (i + 1, j) + 1 * p (i + 1, j + 1)
- G y = -1 * p (i-1, j-1) -2 * p (i, j-1) -1 * p (i + 1, j-1) + 1 * p (i-1, j +1) + 2 * p (i, j + 1) + 1 * p (i + 1, j + 1)
- 그러면 해당 픽셀의 가장자리 크기 값은 다음과 같습니다. √ (G x 2 + G y 2 )
출력 이미지는 각 픽셀의 가장자리 크기 √ (G x 2 + G y 2 )를 그레이 스케일로 나타냅니다.
보너스 :
- 가장자리 감지가 시작되기 전에 이미지를 부드럽게 만들어 가우시안 블러를 수행하여 작은 가장자리를 생략하십시오. 이것은 최종 결과에 -30 %의 보너스를줍니다.
- 가장자리의 각도를 고려하십시오. 동일한 그레이 스케일 값을 취하고 수식 arctan (G y / G x ) 에서 얻은 각도를 사용하여 색상환에서 색상을 추가하여 출력 픽셀에 색상을 지정합니다 . 이것은 최종 결과에 -30 %의 추가 보너스를 제공합니다.
규칙 :
- 가장자리 픽셀의 값을 생략하고 검은 색으로 설정하거나 이미지 외부의 모든 픽셀에 0을 사용할 수 있습니다.
- 출력 이미지는 대부분의 컴퓨터에서 열 수있는 이미지 형식이어야합니다.
- 출력은 디스크에 쓰거나 파일로 파이프 할 수 있어야합니다.
- 입력은 이미지에 대한 상대 경로 형식으로 명령 줄 인수로 제공되거나 명령 줄에서 파이프됩니다.
- 이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 이깁니다!
가우시안 블러를 정확하게 지정할 수 있습니까? 입력 그레이 스케일이 아닌 경우,이 가장자리 감지를 컬러 이미지에 어떻게 적용해야합니까? 출력 이미지의 크기가 입력과 정확히 동일하지만 입력이 내부 픽셀 (0으로 설정 한 것이 아닌)에서만 수행되는 것이 맞습니까?
—
flawr
Computerphile의 에지 감지에 대한 비디오를 보셨습니까 ? 나는 연결을 냄새 맡을 수 있습니다 :)
—
GiantTree
@flawr 나는 가우시안 블러가 가장자리 감지에 적합한 지 테스트해야하므로 좋은 값이 무엇인지 실제로 모른다. 가우시안 블러에 대한 자세한 내용은 여기를 참조하십시오 . 입력 이미지는 컬러로되어 있으며 가장자리 감지를 수행하려면 먼저 이미지를 그레이 스케일로 변환해야합니다. 가장자리 감지는 내부 픽셀에서 A :를 수행하고 출력 이미지의 외부 1px 테두리를 검은 색으로 설정하거나 모든 픽셀에서 B :를 설정하고 이미지 외부의 모든 픽셀 값으로 0을 사용합니다.
—
vrwim
@GiantTree은 비디오가됩니다 nooooooo 완전히 :) 관련이없는
—
vrwim
이것이 왜 표결되지 않았습니까? 완벽하게 유효한 질문 인 것 같습니다.
—
애디슨 크럼