Tôi đang cố gắng thực hiện so khớp biểu đồ bằng Python để cải thiện quy trình ghép của nhiều trình quét chồng chéo. Tôi đang căn cứ mã của mình vào đó được tìm thấy tại:
http://www.idlcoyote.com/ip_tips/histomatch.html
Đến nay, tôi đã quản lý để cắt khu vực chồng chéo của hai raster liền kề và làm phẳng mảng.
vì vậy tôi có hai mảng 1 chiều có cùng độ dài.
Sau đó tôi đã viết mã sau dựa trên mã được tìm thấy tại trang web trên. Trong mã hiển thị, tôi đã thay thế hai bộ dữ liệu rất nhỏ cho hình ảnh gd và bd.
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
bins = range(0,100, 10)
gd_hist = [1,2,3,4,5,4,3,2,1]
bd_hist = [2,4,6,8,10,8,6,4,2]
nPixels = len(gd_hist)
# here we are creating the cumulative distribution frequency for the bad image
cdf_bd = []
for k in range(0, len(bins)-1):
b = sum(bd_hist[:k])
cdf_bd.append(float(b)/nPixels)
# here we are creating the cumulative distribution frequency for the good image
cdf_gd = []
for l in range(0, len(bins)-1):
g = sum(gd_hist[:l])
cdf_gd.append(float(g)/nPixels)
# we plot a histogram of the number of
plt.plot(bins[1:], gd_hist, 'g')
plt.plot(bins[1:], bd_hist, 'r--')
plt.show()
# we plot the cumulative distribution frequencies of both images
plt.plot(bins[1:], cdf_gd, 'g')
plt.plot(bins[1:], cdf_bd, 'r--')
plt.show()
z = []
# loop through the bins
for m in range(0, len(bins)-1):
p = [cdf_bd.index(b) for b in cdf_bd if b < cdf_gd[m]]
if len(p) == 0:
z.append(0)
else:
# if p is not empty, find the last value in the list p
lastval = p[len(p)-1]
# find the bin value at index 'lastval'
z.append(bins[lastval])
plt.plot(bins[1:], z, 'g')
plt.show()
# look into the 'bounds_error'
fi = interp1d(bins[1:], z, bounds_error=False, kind='cubic')
plt.plot(bins[1:], gd_hist, 'g')
plt.show
plt.plot(bins[1:], fi(bd_hist), 'r--')
plt.show()
Chương trình của tôi vẽ đồ thị biểu đồ và phân phối tần số tích lũy thành công ... và tôi nghĩ rằng tôi đã có một phần để có được hàm biến đổi 'z' chính xác .... nhưng sau đó khi tôi sử dụng hàm phân phối 'fi' trên 'bd_hist' để cố gắng khớp nó với tập dữ liệu gd, tất cả đều có hình quả lê.
Tôi không phải là một nhà toán học và rất có khả năng tôi đã bỏ qua một cái gì đó khá rõ ràng.
cdf_bd = np.cumsum(bd_hist) / float(np.sum(bd_hist))