簡體   English   中英

如何標准化 tiff 圖像

[英]How to normalize a tiff image

我試圖將圖像中的一些特定像素設置為黑色,這些圖像是 tiff 格式,這需要我在它們各自的幀中分解它們,因此我的 tiff 圖像有 50 個不同的幀。 對於這樣的任務,我通過訪問給定 position 處的像素索引並簡單地將它們的值設置為 0 來使用簡單值。例如:

img[10, 50] = 0

每次我嘗試設置他們的像素時,圖像都會立即變黃。

在此處輸入圖像描述

但是,如果我刪除將像素值更改/設置為黑色的每一行,圖像就會恢復正常。

這是我的代碼:

from PIL import Image
%pylab inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg


image = "myimage.tif"
path = "C:/Dataset/Face1" + image

 plt.imshow(img)
img=mpimg.imread(path)
img[15, 60] = 0
img[15, 85] = 0
img[15, 105] = 0
img[35, 60] = 0
img[35, 85] = 0
img[35, 105] = 0
img[45, 60] = 0
img[43, 75] = 0
img[43, 92] = 0
img[43, 105] = 0
img[58, 55] = 0
img[65, 83] = 0
img[58, 110] = 0
img[75, 83] = 0
img[85, 75] = 0
img[85, 90] = 0
img[90 ,83] = 0
img[95, 60] = 0
img[99, 83] = 0
img[99, 103] = 0

我嘗試使用 opencv2 以簡單的方式標准化我的圖像:

img1 = cv2.imread('image.tif', cv2.IMREAD_GRAYSCALE)
final_img = cv2.normalize(img1,  img1, 0, 255, cv2.NORM_MINMAX)

得到了這個:

在此處輸入圖像描述

我如何分解圖像

from PIL import Image
import matplotlib.pyplot as plt
imagepath = "face1.tif"
path = "C:/Users/images/" + imagepath
img = Image.open(path)

for i in range(50):
    try:
        img.seek(i)
        img.save('C:/Users/images/face1/%s.tif'%(i,))
    except EOFError:
        break

我想要做的是標准化圖像,當我打印最亮像素之一的值時,output 大約是 8353。此外,將其轉換為 8 位圖像,以便我可以在 matplotlib 上查看它。

您可以使用帶有 Python/OpenCV 的 Scipy exposure.rescale_intensity() 進行適當的標准化。

在下文中,我使用 OpenCV 讀取多頁 TIFF 並循環處理幀,如下所示:

import cv2
import numpy as np
import skimage.exposure as exposure

# read images
imgs = cv2.imreadmulti("face_1.tif", flags = cv2.IMREAD_GRAYSCALE + cv2.IMREAD_ANYDEPTH)[1]

for i,img in enumerate(imgs):
    filename = f"face_1_frame-{i}.png"
    print(f"Processing frame {i} into file {filename}")
    # normalize image to 8-bit range
    img_norm = exposure.rescale_intensity(img, in_range='image', out_range=(0,255)).astype(np.uint8)
    cv2.imwrite(filename, img_norm)

    # display normalized image
    cv2.imshow('normalized',img_norm)
    cv2.waitKey(0)

這是第一個標准化幀:

在此處輸入圖像描述

很可能您的圖像使用了一些非標准的編碼方案。 通常,像素值(對於單個通道)限制為 [0..255]。 在您的情況下,像素值位於 [8162..8383] 范圍內。 matplotlib會自動為您標准化該范圍。 但是,當您將其中一個像素值設置為 0 時,您的范圍將變為 [0..8383],這就是它難以顯示它的原因。 只需標准化數據:

from matplotlib import pyplot as plt
img = plt.imread(r'C:\temp\face_1.tif')
img -= img.min() # you can use more sofisticated img = 255*(img - img.min())/(img.max() - img.min())
img[90 ,83] = 0
img[95, 60] = 0
img[99, 83] = 0
img[99, 103] = 0
plt.imshow(img, cmap='gray')
plt.show()

這會讓你: 在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM