2011-07-13 24 views
6

Những gì tôi đang cố gắng thực hiện trong PHP với GD hoặc ImageMagick là như sau:Làm cách nào để phát hiện/tính toán nếu có một hình ảnh nhỏ bên trong một bức tranh lớn hơn?

Tôi có một hình ảnh lớn (nói 2000 x 2000 pixel) .. Tôi muốn kiểm tra xem ảnh thứ hai, nhỏ hơn (ví dụ 50 x 50 pixel) xuất hiện ở đâu đó bên trong hình ảnh lớn hơn và phần trăm diện tích phù hợp .. Vì vậy, ví dụ: có một kết quả phù hợp 95% của hình ảnh nhỏ hơn tại vị trí đó trong hình ảnh lớn hơn ..

Is điều này có thể? Làm thế nào điều này có thể đạt được?

Cảm ơn !!!!

+0

Bạn đang tìm kiếm bất kỳ cách tiếp cận nào (tức là: sức mạnh vũ phu) hoặc bạn đang tìm cách tiếp cận thuật toán thông minh hơn? – MoarCodePlz

+0

Bạn muốn tìm hình ảnh nhỏ hơn cụ thể (mà bạn có dữ liệu bitmap) hoặc chỉ bất kỳ hình ảnh chung nào? Kích thước hình ảnh nhỏ có được biết hay không? – lxa

+0

Về cơ bản tôi đang tìm cách tiếp cận thuật toán thông minh hơn, nếu điều này có thể trong PHP với so sánh hình ảnh ... Tôi biết mọi thứ, bao gồm kích thước hình ảnh, của hình ảnh nhỏ hơn. –

Trả lời

1

Đây là một câu trả lời tốt cho C#: How to find one image inside of another?

Trong khi tôi khá chắc chắn rằng nó có thể được sử dụng cho PHP quá bởi vì nó chỉ là một thuật toán chung chung đó là ý tưởng khá xấu để sử dụng PHP để so sánh hình ảnh.

Cũng tham khảo Wikipedia Template match bài viết.

0

OK. Nếu bạn có $ BigImage và $ SmallImage.

Và bạn tạo cơ sở hình ảnh cuối cùng $ trên hình ảnh lớn và $ nhỏ. Sau đó, bạn có thể kiểm tra bằng chức năng này: http://www.php.net/manual/en/function.getimagesize.php

Nếu bạn chỉ có $ FinalImage và bạn muốn theo dõi $ smallimage base trong $ Final image, sau đó "NO WAY" trên PHP.

Hãy thử Java.

^_^

+0

Vâng, ảnh nhỏ đã xuất hiện trong ảnh lớn .. - hay không - đó là những gì tôi phải kiểm tra động .. Kiểm tra xem ảnh này có xuất hiện trong hình ảnh lớn hơn này hay không. Kiểm tra xem hình ảnh đó có xuất hiện trong hình ảnh lớn hơn này không, .. –

+0

't làm điều đó trên PHP, bro. –

4

tôi đã có một cái nhìn nhanh chóng trong PHP ImageMagickGD và không phải đã được xây dựng theo cách làm đó. Một cách tiếp cận có thể là sử dụng ImageMagick để chia hình ảnh lớn hơn thành hình nhỏ hơn (cùng kích thước với hình nhỏ hơn) và bắt đầu so sánh chúng với hình nhỏ hơn.

Tuy nhiên điều này sẽ rất chậm tôi cho là vậy.

Bạn có thể làm điều đó bằng tính năng tưởng tượng nếu bạn sử dụng lệnh gọi hệ thống trong mã PHP của mình. Tôi không biết nếu bạn muốn thử này ra nhưng đây là cách nó có thể được thực hiện:

<?php 
//set a bigger time out limit because comparison takes a while 
set_time_limit (275) ; 

//the bigger image 
$bigimage = "big.bmp"; 
//the smaller image 
$smallimage = "small.bmp"; 
//result image 
$resimg = "/tmp/similarity"; 

//system call 
$output = shell_exec("(compare -metric AE -subimage-search ".$bigimage." ".$smallimage." ".$resimg." > /dev/null) 3>&1 1>&2 2>&3"); 

//result is something like "0 @ 251,263" 
$res = explode("@",$output); 
if($res[0]==0) 
{ 
    echo "Perfect match<br/>"; 
    $res = explode(",",$res[1]); 

    echo "width: ".$res[0]; 
    echo "<br/>"; 
    echo "height: ".$res[1]; 
} else { 
    echo "Not match"; 
} 

?> 

Tôi đã thử nghiệm các mã trên trong một hộp linux với XAMPP 1.7.3a cho Linux và ImageMagick 6.7. 1-0 2011-07-10 Q16.

Giới thiệu về so sánh Tôi sử dụng chỉ số AE (Lỗi tuyệt đối) để tính số pixel khác nhau. Kết quả được in ra dòng lỗi (STERR). Tìm hiểu thêm về tìm kiếm subimage của imagemagick bạn có thể tìm thấy here.

Chúc may mắn :)

+0

Điều này thực sự hữu ích .. !!!! Cám ơn rất nhiều.! –

+0

Nếu chênh lệch kích thước hình ảnh cao, điều này sẽ kết thúc với lỗi "so sánh: hình ảnh quá khác nhau" – PeterM

Các vấn đề liên quan