2010-03-01 4 views
5

작은 그림 크기로 자르려는 일러스트레이션 이미지가 가득합니다.공백이나 빈 영역을 피하기 위해 이미지 자르기를위한 좋은 알고리즘이나 라이브러리는 무엇입니까?

문제는 그림의 "재미있는"부분을 보여주기 위해 자르려는 것입니다 (즉, 공백 영역을 피하십시오).

이미지의 배경색은 일반적으로 평면 색상 또는 미세한 그라디언트입니다. 그들은 주로 별개의 모양을 가진 대부분 벡터 스타일의 아트웍입니다.

다음은 몇 가지 예입니다 : link ;-)

나는 기능의 수가 가장 많은 지역을 찾기 위해 슬라이딩 창 이미지 특징 검출 알고리즘의 일종을 사용하는 방법에 대해 생각을 해 봤는데.

저는 이것을 PHP로 구현하고 있지만 라이브러리 나 확장자가없는 경우 직접 구현할 수 있습니다.

아이디어가 있으십니까?

+0

이 사진은 전문입니까? 그렇다면 3 분의 1의 규칙을 확인하십시오. 최소한 다른 분야를 줄여야합니다. –

+0

"공백"은 실제로 단색입니까, 아니면 이미지의 풍부한 영역이 적은가? – Matthew

답변

1

가장자리 감지 알고리즘을 사용하는 것이 좋습니다. 가장 많은 수의 가장자리를 가진 영역을 선택하십시오. 흐릿하지 않은 가장자리에 더 높은 가중치를줍니다 (배경과 다를 수 있음).

1

ImageMagick for PHP에는 thumbnails의 자동 생성이 있습니다. 이 SO question에는 ImageMagick 자동 자르기 연산자에 대한 링크가 있습니다. 확실하지는 않지만, this은 PHP 인터페이스입니다. the link에서

:

부울 Imagick :: trimImage이
이미지에서 배경 색상 있는 가장자리를 제거 ( $ 퍼즈는 부동).

더 일반적인 "흥미도"는 어쩌면 seam carving의 역수를 사용해보십시오 (가장 낮은 에너지 영역이 아닌 가장 높은 에너지를 찾으십시오).

2

ImageMagicktrim입니다. 라이브러리로 사용할 수 있지만 PHP에서 사용하는 것이 얼마나 어려운지 알 수 없습니다. PHP interfaces이 있습니다.

1

OK, 그래서 여기에 내가 예보고 후, 했 내용은 다음과 같습니다

합계 모든 행과 각 이미지의 모든 열. 다음과 같이 두 개의 배열을 얻을 수 있습니다.

 /-----\ /--\ 
    _/  -- | 
___-    \_________ 

몇 가지 이미지에 대해 이러한 배열을 보면 적합한 임계 값 (아마도 0보다 약간 큰 것)을 찾습니다. 그러면이 임계 값의 왼쪽 끝과 오른쪽 끝이 자르기해야합니다. 나는 내가 그것을 명확하게 할 수 있었으면 좋겠다. 그렇지 않다면 - 묻는다! http://pecl.php.net/package/imagick를 사용

+1

행과 열을 합계하지 마십시오. 행/열 간 차이 *를 합합니다. –

1

CLI를 프로그램 :

<?php 
    dl('imagick.so'); 

    $img = new Imagick(); 
    $img->readImage($argv[1]); 

    # (* 0.0: exact match; * 1.0: crop entire image) 
    $fuzz = current($img->getQuantumRange()) * 0.25; 

    $img->trimImage($fuzz); 

    $img->writeImage($argv[2]); 
?> 

그것은 한 이미지가 국경 주변에 프레임을 가지고 있지 않는 한, 충분히 잘 작동합니다.

1

여기에 fairly simple approach은 가장자리 감지 필터를 사용하고 이미지의 중심을 중심으로 잘라내어 미리보기 이미지를 생성합니다. 대부분의 이미지에서는 잘 작동하지만 피사체가 둘 이상인 경우에는 그렇지 않습니다. 나는 소스 이미지에서 "흥미로운"점을 확인하는 다른 방법에 대한 제안에 대해 개방적이다.

1

Drupal에는 smartcrop이라는 프로젝트가 있으며,이 프로젝트에는 이미지에서 가장 높은 엔트로피와 "재미있는"영역을 찾는 PHP 코드가 있습니다. output examples을 참조하십시오.

모듈과 라이브러리의 기능을 아무 것도없는 Drupal 프로젝트에서도 사용할 수 있어야합니다.