[英]How do I remove saturated pixels from an image?
我的代碼目標是打印一個圖像,其中我已經刪除了所有飽和像素(發出最大值的像素)。 這是因為我正在分析來自星星的 .fit 圖像的數據。
我得到的指令是:“你需要做的是從數據中找出二維數組中的最大像素值。然后編寫代碼來刪除這些值,同時仍然保留圖像。基本上,我想要的是看到的是一顆中間有一個洞的星星,你已經去除了飽和像素。”
我已成功找到最大像素值 (65535),現在我需要打印沒有具有該特定值的像素的圖像。
到目前為止,這是我的代碼,但現在我不知道如何從我的圖像中刪除像素。
import numpy as np
from astropy.io import fits
import matplotlib.pyplot as plt
fits_image_filename = "Acturus_V_2s.fit"
hdul = fits.open(fits_image_filename)
data = hdul[0].data
datacut = data[610:710,755:855]
plt.imshow(datacut, origin="lower")
MaxPixelValue = np.amax(datacut)
print(MaxPixelValue)
這給出了輸出:65535 和我的圖像
我應該如何刪除這些像素?
正如評論指出的那樣,通常不可能從圖像中“刪除”像素。 但是有幾種方法可以處理圖像中的某些像素,同時不處理其他像素。 一般來說,要做到這一點,您最終將創建一個布爾掩碼——一個與您的圖像具有相同形狀但包含True
或False
值的數組。
mask = datacut >= MaxPixelValue
現在, mask
數組在原始圖像飽和的任何地方都包含True
,而在其他任何地方都包含False
。
您可能希望將圖像中的飽和像素設置為某種指示性顏色(例如白色或黑色):
datacut[mask] = 0
或者您可以創建一個 numpy maskedarray
,它是原始圖像和掩碼的一種組合:
masked_image = np.ma.masked_array(datacut, mask)
numpy 文檔簡要描述了如何使用掩碼數組。 https://numpy.org/doc/stable/reference/maskedarray.generic.html
我還從天體物理學社區找到了一些可能有用的文檔,因為您也在使用fits
和astropy
。 https://prancer.physics.louisville.edu/astrowiki/index.php/Image_processing_with_Python_and_SciPy#Masked_Image_Operations
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.