Tôi có bộ sưu tập ảnh kỹ thuật số a mountain tại Nhật Bản. Tuy nhiên, ngọn núi thường bị che khuất bởi mây hoặc sương mù.
Tôi có thể sử dụng các kỹ thuật nào để phát hiện thấy ngọn núi có thể nhìn thấy trong hình ảnh? Tôi hiện đang sử dụng Perl với mô-đun Imager, nhưng mở để lựa chọn thay thế.
Tất cả các hình ảnh được lấy từ cùng một vị trí chính xác - đây là một số mẫu.
Sample Images http://www.freeimagehosting.net/uploads/7304a6e191.jpg
giải pháp ngây thơ của tôi
tôi bắt đầu bằng cách lấy một vài mẫu điểm ảnh theo chiều ngang của hình nón núi và so sánh các giá trị độ sáng để các mẫu khác từ trên trời xuống. Điều này làm việc tốt để phân biệt hình ảnh tốt 1 và hình ảnh xấu 2.
Tuy nhiên vào mùa thu tuyết rơi và núi trở nên sáng hơn bầu trời, như hình 3 và thử nghiệm độ sáng đơn giản của tôi bắt đầu thất bại.
Hình ảnh 4 là ví dụ về trường hợp cạnh. Tôi sẽ phân loại đây là một hình ảnh tốt vì một số ngọn núi có thể nhìn thấy rõ ràng.
UPDATE 1
Cảm ơn bạn đã góp ý - Tôi hạnh phúc tất cả các bạn bao la quá ước tính thẩm của tôi.
Dựa trên câu trả lời, tôi đã bắt đầu thử chuyển đổi ImageMagick edge-detect, điều này mang lại cho tôi một hình ảnh đơn giản hơn nhiều để phân tích.
convert sample.jpg -edge 1 edge.jpg
Edge detected samples http://www.freeimagehosting.net/uploads/caa9018d84.jpg
Tôi giả sử tôi nên sử dụng một số loại mặt nạ để thoát khỏi những cái cây và hầu hết các đám mây.
Khi tôi có hình ảnh có mặt nạ, cách tốt nhất để so sánh sự giống nhau với hình ảnh 'tốt' là gì? Tôi đoán lệnh "compare" phù hợp cho công việc này? Làm thế nào để tôi nhận được giá trị 'giống nhau' bằng số này?
UPDATE 2
Tôi nghĩ rằng tôi có thể nhận được ở đâu đó với cây dây leo.
Tôi đã tạo hình ảnh 'hạt nhân' của mình (phía trên hình ảnh bên dưới) bằng cách thực hiện phát hiện cạnh trên một hình ảnh tốt. Sau đó tôi bôi đen tất cả "tiếng ồn" xung quanh đường viền của ngọn núi và sau đó cắt nó.
sau đó tôi sử dụng đoạn mã sau:
use Image::Magick;
# Edge detect the test image
my $test_image = Image::Magick->new;
$test_image->Read($ARGV[0]);
$test_image->Quantize(colorspace=>'gray');
$test_image->Edge(radius => 1);
# Load the kernel
my $kernel_image = Image::Magick->new;
$kernel_image->Read('kernel-crop.jpg');
# Convolve and show the result
$kernel_image->Convolve(coefficients => [$test_image->GetPixels()]);
$kernel_image->Display();
Tôi chạy này cho hình ảnh mẫu khác nhau, và tôi đã nhận kết quả như sau (hình ảnh convolved được hiển thị bên dưới mỗi mẫu):
(Xin lỗi - hình ảnh mẫu khác nhau từ lần trước!)
alt text http://www.freeimagehosting.net/uploads/f9a5a34980.jpg
Bây giờ tôi đang cố gắng để xác định số lượng như thế nào 'ridgy' một hình ảnh là. Tôi đã thử lấy độ sáng trung bình của hình ảnh:
$kernel_image->Scale('1x1');
die $kernel_image->GetPixel(x=>1,y=>1)[0];
Nhưng điều này không mang lại giá trị ý nghĩa (0,015, 0,0175 và 0,0174). Có cách nào tốt hơn không?
+1 câu hỏi được trình bày rất tốt – msw
Bạn đang đánh giá thấp khả năng của chính mình. Liên kết để "so sánh" trong Bản cập nhật 1 có một số phương pháp tiếp cận rất tốt để tạo ra một mức độ đo lường tương tự thông qua chập chững như Marcelo đề xuất. Tôi hy vọng bạn đang nghịch với những người như tôi gõ. – msw