Kết hợp biểu đồ bằng Python để cải thiện quá trình ghép của nhiều trình quét chồng chéo?


11

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.


Tôi không biết nhiều về kết hợp biểu đồ nhưng CDF của bạn có cần tổng hợp thành 1 (theo định nghĩa) không? cdf_bd = np.cumsum(bd_hist) / float(np.sum(bd_hist))
Jeff G

Câu trả lời:


2

Mặc dù tôi không thể nhận xét về việc triển khai được đề xuất, bạn có thể muốn kiểm tra việc triển khai kết hợp biểu đồ hiện có được thực hiện cho GRASS GIS 7 (ở đây là một addon):

https://trac.osgeo.org/grass/browser/grass-addons/grass7/imagery/i.histo.match

Đối với hướng dẫn và một ví dụ, xem

http://grass.osgeo.org/grass70/manuals/addons/i.histo.match.html

Mã được xuất bản theo giấy phép GPL2 +.


1

Như một fudge hoang dã; Tôi không chắc chắn bạn cần PDF nếu bạn có dữ liệu đếm trong các danh mục ...
Bạn có thể chuyển đổi số lượng của từng giá trị cho từng biểu đồ khác nhau thành giá trị XY, sau đó sử dụng một số chỉ báo hồi quy để kiểm tra sự phù hợp đó không? Tức là, đối với hai biểu đồ hoàn toàn giống nhau, một phân tích tương quan sẽ cung cấp và R bình phương là 1.0.


0

một số dữ liệu mẫu sẽ tốt vì nó có thể thay đổi từ sat sang sat. đây là một kịch bản đơn giản mà tôi đã thực hiện để cố gắng cân bằng biểu đồ:

https://github.com/rupestre-campos/histogram_equalize

Có lẽ bạn có thể có được một cái nhìn sâu sắc.

Nó cũng tính toán cdf như bạn làm, nhưng vì tôi đã thử nó sẽ phát điên nếu bạn tính toán băng tần trên mỗi băng tần, vì vậy bạn đã xem xét toàn bộ raster.

Có vẻ như bạn mất cân bằng tham chiếu màu sắc và hồ sơ quang phổ. Ngoài ra, không cần phải đếm không có pixel dữ liệu, sau đó phải xóa tổng số pixel của ảnh để tính pdf chính xác.

Sau một số thử nghiệm, tôi thích kết quả trực quan bằng cách sử dụng toàn bộ cách tiếp cận raster tới 3-4 băng tần Landsat8 và chuyển đổi từ phạm vi 16bit sang 8bit 0-255.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.