Hướng dẫn euclidean distance between two images python - euclidean khoảng cách giữa hai hình ảnh python

4

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đã triển khai thuật toán k-reighbours trong Python để phân loại một số hình ảnh được chọn ngẫu nhiên từ cơ sở dữ liệu MNIST. Tuy nhiên, tôi thấy chức năng khoảng cách của mình khá chậm: một bài hát của 10 hình ảnh thử nghiệm đối với bộ đào tạo hình ảnh 10k mất khoảng 2 phút. Các hình ảnh có độ phân giải 28x28 pixel. Vì tôi là người mới đến Python, tôi có cảm giác điều này có thể nhanh hơn. Hàm được cho là để tính khoảng cách Euclide giữa hai hình ảnh thang độ xám có cùng kích thước.

def calculateDistance(image1, image2):
    distance = 0
    for i in range(len(image1)):
        for j in range(len(image1)):
            distance += math.pow((image1[i][j]-image2[i][j]),2)
    distance = numpy.sqrt(distance)
    return distance

Hỏi ngày 16 tháng 10 năm 2015 lúc 22:06Oct 16, 2015 at 22:06

Hướng dẫn euclidean distance between two images python - euclidean khoảng cách giữa hai hình ảnh python

1

Nếu bạn đang sử dụng các mảng Numpy để thể hiện hình ảnh, thay vào đó bạn có thể sử dụng phần sau:

def calculateDistance(i1, i2):
    return numpy.sum((i1-i2)**2)

Điều này sẽ nhanh hơn nhiều vì nó sử dụng triển khai C nhanh để nâng vật nặng. Cũng xem xét sử dụng bộ nhớ đệm để không tính toán sự khác biệt của hai hình ảnh hai lần.

Đã trả lời ngày 16 tháng 10 năm 2015 lúc 22:23Oct 16, 2015 at 22:23

Niklas B.Niklas B.Niklas B.

90,6K17 Huy hiệu vàng191 Huy hiệu bạc2222 Huy hiệu đồng17 gold badges191 silver badges222 bronze badges

1

1) Tính toán sự khác biệt giữa hai hình ảnh thành một biến tạm thời sau đó tự nhân lên biến đó (hoạt động trên số nguyên) thay vì thực hiện toán học. Với khoảng cách nhỏ nhất, đừng bận tâm đến cuối cùng (điều này thực sự sẽ không tăng tốc mọi thứ vì nó không nằm trong vòng lặp nhưng vẫn không cần bạn chỉ sử dụng kết quả để so sánh tương đối)

Đã trả lời ngày 16 tháng 10 năm 2015 lúc 22:14Oct 16, 2015 at 22:14

QOBAQOBAqoba

2511 huy hiệu bạc6 Huy hiệu đồng1 silver badge6 bronze badges

1

Bài viết này đã được xuất bản như một phần của Blogathon khoa học dữ liệu.

Giới thiệu

Bạn đã bao giờ mơ ước xây dựng ứng dụng tương tự hình ảnh của riêng mình nhưng sợ rằng bạn không biết đủ về học tập sâu, mạng lưới thần kinh chập, v.v. Đừng lo. Hướng dẫn sau đây sẽ giúp bạn bắt đầu và giúp bạn mã hóa ứng dụng tương tự hình ảnh của riêng bạn với toán học cơ bản.

Trước khi chúng tôi nhảy vào toán học và mã, tôi sẽ hỏi bạn một câu hỏi đơn giản. Cho hai hình ảnh tham chiếu và một hình ảnh thử nghiệm, bạn nghĩ hình ảnh thử nghiệm của chúng tôi thuộc về hai:

Hình ảnh tham chiếu 1

Hướng dẫn euclidean distance between two images python - euclidean khoảng cách giữa hai hình ảnh python

Hình ảnh tham chiếu 2

Hướng dẫn euclidean distance between two images python - euclidean khoảng cách giữa hai hình ảnh python

Hình ảnh kiểm tra

Hướng dẫn euclidean distance between two images python - euclidean khoảng cách giữa hai hình ảnh python

Nếu bạn tin rằng hình ảnh thử nghiệm của chúng tôi tương tự như hình ảnh tham khảo đầu tiên của chúng tôi, bạn đúng. Nếu bạn tin khác thì hãy để Lừa tìm hiểu cùng với sức mạnh của toán học và lập trình.

Tương lai của tìm kiếm sẽ là về hình ảnh chứ không phải từ khóa. - Ben Silbermann, Giám đốc điều hành Pinterest.Ben Silbermann, Pinterest CEO.

Vector hình ảnh

Mỗi hình ảnh được lưu trữ trong máy tính của chúng tôi dưới dạng số và một vectơ của các số đó hoàn toàn có thể mô tả hình ảnh của chúng tôi được gọi là vectơ hình ảnh.

Khoảng cách Euclide:

Khoảng cách Euclide biểu thị khoảng cách giữa bất kỳ hai điểm nào trong không gian N chiều. Vì chúng tôi đang đại diện cho hình ảnh của chúng tôi là vectơ hình ảnh, chúng không là gì ngoài một điểm trong một không gian n chiều và chúng tôi sẽ sử dụng khoảng cách Euclide để tìm khoảng cách giữa chúng.

Hướng dẫn euclidean distance between two images python - euclidean khoảng cách giữa hai hình ảnh python

Histogram:

Biểu đồ là một màn hình đồ họa của các giá trị số. Chúng tôi sẽ sử dụng vectơ hình ảnh cho cả ba hình ảnh và sau đó tìm khoảng cách Euclide giữa chúng. Dựa trên các giá trị trả về hình ảnh với khoảng cách nhỏ hơn giống với giá trị khác.

Hướng dẫn euclidean distance between two images python - euclidean khoảng cách giữa hai hình ảnh python

Để tìm thấy sự tương đồng giữa hai hình ảnh, chúng tôi sẽ sử dụng phương pháp sau:

  1. Đọc các tệp hình ảnh dưới dạng một mảng.
  2. Vì các tệp hình ảnh được tô màu, có 3 kênh cho các giá trị RGB. Chúng tôi sẽ làm phẳng chúng sao cho mỗi hình ảnh là một mảng 1-D.
  3. Khi chúng tôi có các tệp hình ảnh của mình dưới dạng một mảng, chúng tôi sẽ tạo biểu đồ cho mỗi hình ảnh trong đó cho mỗi chỉ mục 0 - 255, chúng tôi sẽ tính sự xuất hiện của giá trị pixel đó trong hình ảnh.
  4. Khi chúng ta có biểu đồ của chúng ta, chúng ta sẽ sử dụng khoảng cách L2-Norm hoặc Euclide để tìm sự khác biệt của hai biểu đồ.
  5. Dựa trên khoảng cách giữa biểu đồ của hình ảnh thử nghiệm của chúng tôi và hình ảnh tham chiếu, chúng tôi có thể tìm thấy hình ảnh hình ảnh thử nghiệm của chúng tôi tương tự như.

Mã hóa cho sự tương đồng hình ảnh trong Python

Nhập các phụ thuộc mà chúng tôi sẽ sử dụng

from PIL import Image
from collections import Counter
import numpy as np

Chúng tôi sẽ sử dụng Numpy để lưu trữ hình ảnh như một mảng numpy, hình ảnh để đọc hình ảnh theo giá trị số và đếm để đếm số lần mỗi giá trị pixel (0-255) xảy ra trong hình ảnh.

Đọc hình ảnh

Chúng ta có thể thấy rằng hình ảnh ra đã được đọc thành công dưới dạng mảng 3-D. Trong bước tiếp theo, chúng ta cần làm phẳng mảng 3-D này thành một mảng 1 chiều.

flat_array_1 = array1.flatten()
print(np.shape(flat_array_1))
>>> (245760, )

Chúng tôi sẽ thực hiện các bước tương tự cho hai hình ảnh khác. Tôi sẽ bỏ qua điều đó ở đây để bạn cũng có thể thử nó.

Tạo ra vectơ tính toán đếm ngược:

RH1 = Counter(flat_array_1)

Dòng mã sau đây trả về một từ điển trong đó khóa tương ứng với giá trị pixel và giá trị của khóa là số lần pixel có trong hình ảnh.

Một hạn chế của khoảng cách Euclide là nó đòi hỏi tất cả các vectơ phải được chuẩn hóa, tức là cả hai vectơ cần phải có cùng kích thước. Để đảm bảo rằng vectơ biểu đồ của chúng tôi được chuẩn hóa, chúng tôi sẽ sử dụng vòng lặp cho vòng 0-255 và tạo biểu đồ của chúng tôi với giá trị của khóa nếu khóa có trong hình ảnh khác, chúng tôi nối 0.

H1 = []
for i in range(256):
    if i in RH1.keys():
        H1.append(RH1[i])
    else:
        H1.append(0)

Phần trên của mã tạo ra một vectơ có kích thước (256,) trong đó mỗi chỉ mục tương ứng với giá trị pixel và giá trị tương ứng với số lượng của pixel trong hình ảnh đó.

Chúng tôi làm theo các bước tương tự cho hai hình ảnh khác và có được các vectơ lịch sử đếm tương ứng của chúng. Tại thời điểm này, chúng tôi có các vectơ cuối cùng của chúng tôi cho cả hình ảnh tham chiếu và hình ảnh thử nghiệm và tất cả những gì chúng tôi cần làm là tính toán khoảng cách và dự đoán.

Chức năng khoảng cách Euclide:

def L2Norm(H1,H2):
    distance =0
    for i in range(len(H1)):
        distance += np.square(H1[i]-H2[i])
    return np.sqrt(distance)

Hàm trên có hai biểu đồ và trả về khoảng cách Euclide giữa chúng.

Sự đánh giá :

Vì chúng ta có mọi thứ chúng ta cần để tìm sự tương đồng hình ảnh, chúng ta hãy tìm ra khoảng cách giữa hình ảnh thử nghiệm và hình ảnh tham khảo đầu tiên của chúng ta.

dist_test_ref_1 = L2Norm(H1,test_H)
print("The distance between Reference_Image_1 and Test Image is : {}".format(dist_test_ref_1))
>>> The distance between Reference_Image_1 and Test Image is : 9882.175468994668

Bây giờ chúng ta hãy tìm ra khoảng cách giữa hình ảnh thử nghiệm và hình ảnh tham khảo thứ hai của chúng tôi.

dist_test_ref_2 = L2Norm(H2,test_H)
print("The distance between Reference_Image_2 and Test Image is : {}".format(dist_test_ref_2))
>>> The distance between Reference_Image_2 and Test Image is : 137929.0223122023

Sự kết luận

Dựa trên các kết quả trên, chúng ta có thể thấy rằng khoảng cách giữa hình ảnh thử nghiệm của chúng tôi và hình ảnh tham chiếu đầu tiên của chúng tôi nhỏ hơn nhiều so với khoảng cách giữa thử nghiệm và hình ảnh tham chiếu thứ hai của chúng tôi có ý nghĩa vì cả hình ảnh thử nghiệm và hình ảnh tham chiếu đầu tiên của chúng tôi là hình ảnh của Một piegon trong khi hình ảnh tham khảo thứ hai của chúng tôi là của một con công.

Trong hướng dẫn sau đây, chúng tôi đã học cách sử dụng toán học cơ bản và ít lập trình để xây dựng yếu tố dự đoán tương tự hình ảnh của riêng mình với kết quả khá tốt.

Mã đầy đủ cùng với các hình ảnh có thể được tìm thấy ở đây.

Thông tin về các Tác giả

Tên tôi là Prateek Agrawal và tôi là sinh viên năm thứ ba tại Học viện Công nghệ thông tin và sản xuất Kancheepuram theo đuổi bằng cấp kép B.Tech và M.Tech của tôi về khoa học máy tính. Tôi đã luôn có một sở trường về học máy và khoa học dữ liệu và đã thực hành nó trong năm ngoái và cũng có một số chiến thắng cho tín dụng của tôi.

Cá nhân tôi tin rằng niềm đam mê là tất cả những gì bạn cần. Tôi nhớ rằng việc nghe mọi người nói về CNNS, RNN và học sâu vì không thể hiểu một phần nào của nó nhưng tôi đã không bỏ cuộc. Tôi đã có niềm đam mê và tôi bắt đầu thực hiện các bước bé để học và ở đây tôi đang xuất bản blog đầu tiên của mình. Tôi hy vọng bạn thích đọc nó và cảm thấy hơi tự tin về bản thân. & NBSP; Tin tôi đi về điều này, nếu tôi có thể, bạn có thể.Passion Is All You Need. I remember getting scared hearing people talk about CNNS, RNNs and Deep Learning because could not understand a single piece of it but I didn’t give up. I had the passion and I began taking baby steps towards learning and here I am publishing my first blog. I hope you enjoyed reading this and feel a bit confident about yourself.  Trust me on this, if I can, you can.

Xin vui lòng ping cho tôi trong trường hợp của bất kỳ truy vấn nào hoặc chỉ để nói xin chào!

LinkedIn: & NBSP;
Github: https://github.com/prateekagrawaliiit

Tín dụng
  • Wikipedia
  • Phân tích Vidhya
  • Vừa phải
  • Hình ảnh Google

Các phương tiện truyền thông được hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của tác giả.

Làm thế nào để bạn tìm thấy khoảng cách Euclide giữa hai hình ảnh?

Tính toán khoảng cách Euclide cuối cùng (vô hướng) giữa hai hình ảnh, sử dụng: imeudist = sqrt ((ip-is) * g * (ip-is).ImEuDist = sqrt( (Ip-Is) * G * (Ip-Is).

Làm thế nào để bạn tính toán khoảng cách Euclide trong Python?

Phương thức toán học () trả về khoảng cách Euclide giữa hai điểm (p và q), trong đó p và q là tọa độ của điểm đó.Lưu ý: Hai điểm (P và Q) phải có cùng kích thước. dist() method returns the Euclidean distance between two points (p and q), where p and q are the coordinates of that point. Note: The two points (p and q) must be of the same dimensions.

Khoảng cách Euclide trong xử lý hình ảnh là gì?

Khoảng cách Euclide là khoảng cách đường thẳng giữa hai pixel.Khối thành phố.Số liệu khoảng cách khối thành phố đo đường dẫn giữa các pixel dựa trên khu phố 4 kết nối.Pixels có các cạnh chạm nhau cách nhau 1 đơn vị;Pixels Toucally Touching cách nhau 2 đơn vị.the straight-line distance between two pixels. City Block. The city block distance metric measures the path between the pixels based on a 4-connected neighborhood. Pixels whose edges touch are 1 unit apart; pixels diagonally touching are 2 units apart.

Khoảng cách Euclide giữa hai đối tượng này là gì?

Trong toán học, khoảng cách Euclide giữa hai điểm trong không gian Euclide là độ dài của một phân đoạn dòng giữa hai điểm.Nó có thể được tính toán từ các tọa độ Cartesian của các điểm bằng định lý Pythagore, do đó đôi khi được gọi là khoảng cách Pythagore.the length of a line segment between the two points. It can be calculated from the Cartesian coordinates of the points using the Pythagorean theorem, therefore occasionally being called the Pythagorean distance.