update,
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
from compareImgs import compareImgs
|
||||
import cv2 as cv
|
||||
from glob import glob
|
||||
from compareImgs_hist import compareImgs_hist
|
||||
from compareImgs_hist_rgb import compareImgs_hist_rgb
|
||||
from SIFT import SIFT
|
||||
from pprint import pprint
|
||||
import os, sys
|
||||
|
||||
# the directory of the image database
|
||||
database_dir = "image.orig"
|
||||
|
||||
|
||||
def retrieval(choice="1"):
|
||||
if choice == "1":
|
||||
src_rgb = cv.imread("beach.jpg")
|
||||
# print("You choose: %s - beach\n" % choice)
|
||||
if choice == "2":
|
||||
src_rgb = cv.imread("building.jpg")
|
||||
# print("You choose: %s - building\n" % choice)
|
||||
if choice == "3":
|
||||
src_rgb = cv.imread("bus.jpg")
|
||||
# print("You choose: %s - bus\n" % choice)
|
||||
if choice == "4":
|
||||
src_rgb = cv.imread("dinosaur.jpg")
|
||||
# print("You choose: %s - dinosaur\n" % choice)
|
||||
if choice == "5":
|
||||
src_rgb = cv.imread("flower.jpg")
|
||||
# print("You choose: %s - flower\n" % choice)
|
||||
if choice == "6":
|
||||
src_rgb = cv.imread("horse.jpg")
|
||||
# print("You choose: %s - horse\n" % choice)
|
||||
if choice == "7":
|
||||
src_rgb = cv.imread("man.jpg")
|
||||
# print("You choose: %s - man\n" % choice)
|
||||
|
||||
min_diff = 1e50
|
||||
|
||||
# src_input = cv.imread("man.jpg")
|
||||
# cv.imshow("Input", src_input)
|
||||
|
||||
# change the image to gray scale
|
||||
src_gray = cv.cvtColor(src_rgb, cv.COLOR_BGR2GRAY)
|
||||
|
||||
# read image database
|
||||
database = sorted(glob(database_dir + "/*.jpg"))
|
||||
|
||||
raw_results = []
|
||||
i = 0
|
||||
for img in database[0:150]:
|
||||
# read image
|
||||
img_rgb = cv.imread(img)
|
||||
# convert to gray scale
|
||||
img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
|
||||
# compare the two images
|
||||
diff_gray = compareImgs(src_gray, img_gray)
|
||||
|
||||
# compare the two images by histogram, uncomment the following line to use histogram
|
||||
diff_rgb = compareImgs_hist_rgb(src_rgb, img_rgb)
|
||||
|
||||
sift_match = SIFT(src_rgb, img_rgb)
|
||||
raw_results.append([img, diff_gray, diff_rgb, sift_match])
|
||||
|
||||
# if i > 3:
|
||||
# break
|
||||
i += 1
|
||||
|
||||
# normalize
|
||||
min_diff_gray = min([raw_result[1] for raw_result in raw_results])
|
||||
max_diff_gray = max([raw_result[1] for raw_result in raw_results])
|
||||
min_diff_rgb = min([raw_result[2] for raw_result in raw_results])
|
||||
max_diff_rgb = max([raw_result[2] for raw_result in raw_results])
|
||||
min_diff_sift_match = min([raw_result[3] for raw_result in raw_results])
|
||||
max_diff_sift_match = max([raw_result[3] for raw_result in raw_results])
|
||||
|
||||
for i in range(len(raw_results)):
|
||||
raw_results[i] = [
|
||||
raw_results[i][0],
|
||||
(raw_results[i][1] - min_diff_gray) / (max_diff_gray - min_diff_gray),
|
||||
(raw_results[i][2] - min_diff_rgb) / (max_diff_rgb - min_diff_rgb),
|
||||
(raw_results[i][3] - min_diff_sift_match) / (max_diff_sift_match - min_diff_sift_match),
|
||||
]
|
||||
|
||||
weight_diff_gray = 0.7
|
||||
weight_diff_rgb = 0.3
|
||||
weight_sift_match = 0
|
||||
|
||||
for raw_result in raw_results:
|
||||
img, diff_gray, diff_rgb, sift_match = raw_result
|
||||
test = sum(
|
||||
[
|
||||
#
|
||||
weight_diff_gray * diff_gray,
|
||||
weight_diff_rgb * diff_rgb,
|
||||
weight_sift_match * (1 - sift_match),
|
||||
]
|
||||
)
|
||||
if test <= min_diff:
|
||||
min_diff = test
|
||||
result = img
|
||||
|
||||
result_category = result.replace("image.orig/", "")[0]
|
||||
|
||||
print("r:" + result + " rc:" + result_category)
|
||||
return result_category
|
Reference in New Issue
Block a user