ฉันพยายามทำการจับคู่ฮิสโตแกรมด้วย Python เพื่อปรับปรุงกระบวนการโมเสกของแรสเตอร์ซ้อนทับหลาย ๆ อัน ฉันกำลังใช้รหัสของฉันในสิ่งที่พบได้ที่:
http://www.idlcoyote.com/ip_tips/histomatch.html
ในวันที่ฉันมีการจัดการเพื่อคลิปพื้นที่ที่ทับซ้อนกันของสอง rasters ที่อยู่ติดกันและแผ่อาร์เรย์
ดังนั้นฉันจึงมีอาร์เรย์ 1 มิติสองมิติที่มีความยาวเท่ากัน
ฉันได้เขียนรหัสต่อไปนี้ตามที่พบในเว็บไซต์ด้านบน ในรหัสที่แสดงฉันได้แทนที่สองชุดข้อมูลที่มีขนาดเล็กมากสำหรับภาพ gd และ 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()
โปรแกรมของฉันแปลงฮิสโทแกรมและการแจกแจงความถี่สะสมเรียบร้อยแล้ว ... และฉันคิดว่าฉันมีส่วนหนึ่งในการทำให้ฟังก์ชันการแปลง 'z' ถูกต้อง .... แต่แล้วเมื่อฉันใช้ฟังก์ชันการกระจาย 'fi' บน 'bd_hist' เพื่อพยายามจับคู่กับชุดข้อมูล gd ทั้งหมดจะเป็นรูปลูกแพร์
ฉันไม่ใช่นักคณิตศาสตร์และเป็นไปได้สูงที่ฉันจะมองข้ามบางสิ่งที่เห็นได้ชัด
cdf_bd = np.cumsum(bd_hist) / float(np.sum(bd_hist))