2009-10-30 2 views
2

저는 이전에 GD를 사용 했었 습니다만, 즉석에서 이미지의 크기를 재조정/생성하는 데만 사용되었습니다.PHP로 이미지의 주된 그늘을 감지합니다.

가능한 한 간단하게 밝은 배경인지 어두운 배경인지 확인하려면 이미지를 확인해야합니다. 나는. background가 predominately 'light'이면 '1'의 값이 반환되고, predominately 'dark'이면 '0'을 반환합니다.

한 번에이 과정에서 반복되는 5 개의 이미지 만있을 것입니다. 그러나 여기서 처리 시간이 매우 중요합니다. 페이지는 자주 호출 될 것입니다.

어디서 올바른 방향으로 나를 가리킬 수 있습니까?

답변

3

먼저 활용할 수있는 패턴이 있는지 확인하십시오. 예를 들어 항상 왼쪽 위 또는 오른쪽 위 모서리가 항상 배경색이됩니까? 그렇다면 픽셀의 색상을 살펴보십시오.

키 픽셀을보고 평균하여 "충분히 좋은"아이디어를 얻을 수 있습니다.

이와 같은 간단한 작업을 수행하지 않으면 수행해야 할 작업이 오름차순으로 시작됩니다.

내가 가진 좋은 아이디어는 왼쪽 상단에서 오른쪽 하단까지 대각선으로가는 픽셀 스트립을 취하는 것입니다 (어쩌면 Bresenham's line algorithm을보십시오). 어둡고 밝은 색상의 줄무늬를 찾으십시오. 아마도 가장 오래 걸릴 것입니다. 그것이 작동하지 않는다면 어쩌면 당신은 그들이 얼마나 밝고 어두웠는지에 따라 "득점"해야 할 것입니다.

이미지가 불필요하게 커지면 (예 : 1000x1000 이상) imagecopyresized를 사용하여 적당한 크기 (예 : 80x80)로 축소 할 수 있습니다.

이미지의 대부분이 배경색 인 경우 효과가있는 것은 이미지를 1 픽셀로 리샘플링하고 해당 픽셀의 색상을 확인하는 것입니다 (또는 작은 4x4 정도의 작은 것으로 보아서 이미지가 주로 밝거나 어두운 경우).

imagecopyresampled는 imagecopyresized보다 상당히 비쌉니다. '크기 재조정은 원본에서 개별 픽셀을 가져 오는 반면 리샘플링은 실제로 픽셀을 혼합합니다.

"밝기"를 측정하려면 R, G 및 B 값을 함께 추가하면됩니다. 또는 당신은 YCbCr에 사용 루마에 대한 공식 갈 수 :

Y' = 0.299 * R + 0.587 * G + 0.114 * B 

이 밝기보다 "인간 중심"측정을 제공합니다.

+1

놀라운, thouroughly 고려 된 대답에 감사드립니다! 10x10 크기의 샘플을 사용하기로 결정했습니다. – Aaron

+0

도와 주니 기쁘게 생각합니다. 감사합니다. – Artelius

+0

참고 사항 : imagecopyresampled는 바이 큐빅 보간 알고리즘을 사용합니다. – Jacco

관련 문제