[PYTHON] Bildverarbeitung 100 Schläge ①

Ich habe kürzlich begonnen, an 100 Klopfen für die Bildverarbeitung zu arbeiten , daher einige Implementierungsbeispiele. Dieses Mal habe ich einige von Q1-10 abgeholt.

Q6 Verarbeitung zur Farbreduzierung

Die Verarbeitungsformel lautet wie folgt

val = \left\{
\begin{array}{ll}
32 & (0 \leq x < 64) \\
96 & (64 \leq x < 128) \\ 
96 & (128 \leq x < 192) \\ 
96 & (192 \leq x < 256) \\ 
\end{array}
\right.

python


def reduce(pix):
    if 0 <= pix < 64:
        return 32
    elif 64 <= pix < 128:
        return 96
    elif 128 <= pix <192:
        return 160
    else:
        return 224

def reduce_color(img):
    return np.vectorize(reduce)(img)

Q7 Average Pooling

python


def average_pool(img, f=8):
    height, width, channel = img.shape
    n = int(width/f)
    out = np.empty(shape=(n, n, channel))
    
    print(out.shape)
    
    
    for h in range(n):
        for w in range(n):
            for c in range(channel):
                vert_start = h * f
                vert_end = vert_start + f
                horiz_start = w * f
                horiz_end = horiz_start + f
                
                val = np.sum(img[vert_start:vert_end, horiz_start:horiz_end, c]) / f**2
                
                out[h, w, c] = val
    
    return out.astype(np.int32)

Q8: Max Pooling

python


def max_pool(img, f=8):
    height, width, channel = img.shape
    n = int(width/f)
    out = np.empty(shape=(n, n, channel))
    
    print(out.shape)
    
    
    for h in range(n):
        for w in range(n):
            for c in range(channel):
                vert_start = h * f
                vert_end = vert_start + f
                horiz_start = w * f
                horiz_end = horiz_start + f
                
                val = np.max(img[vert_start:vert_end, horiz_start:horiz_end, c])
                
                out[h, w, c] = val
    
    return out.astype(np.int32)

Q9 Gauß-Filter

Ich dachte, es sei einfach, aber unerwartet hatte ich es aufgrund eines Fehlers im Index schwer. .. .. Die Implementierung des Kernels basierte auf der Beispiellösung.

python


def gaussian_filter(img, size=3, sigma=1.3):
    height, width, channel = img.shape
    
    # padding
    pad = size//2
    img_pad = img.copy()
    img_pad = np.pad(img_pad, [(pad, pad), (pad, pad), (0, 0)], 'constant', constant_values=(0,0))
    
    # PREPARE KERNEL
    K = np.zeros(shape=(size, size), dtype=np.float32)
    for x in range(-pad, -pad+size):
        for y in range(-pad, -pad+size):
            K[y+pad, x+pad] = (1/((2 * np.pi * sigma * sigma)) * np.exp(-(x**2+y**2) / (2*(sigma**2))))
    K /= K.sum()
    
    tmp = img_pad.copy()
    
    for h in range(height):
        for w in range(width):
            for c in range(channel):
                tmp[h+pad, w+pad, c] = np.sum(K*img_pad[h:h+size,  w:w+size, c])
    
    tmp = tmp[pad:pad+height, pad:pad+width, :].astype(np.int32)
                
    return tmp

Q10 Medianfilter

python


def median_filter(img, size=3):
    height, width, channel = img.shape
    out = img.copy()
    
    # padding 
    pad = size//2
    out = img.copy()
    out = np.pad(out, [(pad, pad), (pad, pad), (0, 0)], 'constant', constant_values=(0,0))
    
    assert out.shape == (img.shape[0]+2*pad, img.shape[1]+2*pad, img.shape[2])
    
    # Apply filter
    tmp = out.copy()
    
    for h in range(height):
        for w in range(width):
            for c in range(channel):
                out[h+pad, w+pad, c] = np.median(tmp[h:h+size, w:w+size, c])
    
    out = out[pad:H, pad:W, :].astype(np.uint8)
    
    return out

Recommended Posts

Bildverarbeitung 100 Schläge ①
100 Schläge bei der Bildverarbeitung !! (011-020) Frühes Spiel
100 Klopfen bei der Bildverarbeitung !! (001 - 010) Vorsichtig und vorsichtig
100 Sprachverarbeitungsklopfen 03 ~ 05
100 Sprachverarbeitungsklopfen (2020): 40
100 Sprachverarbeitungsklopfen (2020): 32
Python-Bildverarbeitung
100 Sprachverarbeitungsklopfen (2020): 47
100 Sprachverarbeitungsklopfen (2020): 22
100 Sprachverarbeitungsklopfen (2020): 26
100 Sprachverarbeitungsklopfen (2020): 34
100 Sprachverarbeitungsklopfen (2020): 42
100 Sprachverarbeitungsklopfen (2020): 29
100 Sprachverarbeitungsklopfen (2020): 49
100 Sprachverarbeitungsklopfen 06 ~ 09
100 Sprachverarbeitungsklopfen (2020): 43
100 Sprachverarbeitungsklopfen (2020): 24
100 Sprachverarbeitungsklopfen (2020): 45
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Bildverarbeitung 100 Klopfen Q9, Q10 (Filter) Beschleunigung
100 Sprachverarbeitungsklopfen (2020): 10-19
100 Sprachverarbeitungsklopfen (2020): 30
100 Sprachverarbeitungsklopfen (2020): 00-09
100 Sprachverarbeitungsklopfen (2020): 31
100 Sprachverarbeitungsklopfen (2020): 48
100 Sprachverarbeitungsklopfen (2020): 44
100 Sprachverarbeitungsklopfen (2020): 41
100 Sprachverarbeitungsklopfen (2020): 37
100 Bildverarbeitung mit Python Knock # 2 Graustufen
100 Sprachverarbeitungsklopfen (2020): 25
100 Sprachverarbeitungsklopfen (2020): 23
100 Sprachverarbeitungsklopfen (2020): 33
100 Sprachverarbeitungsklopfen (2020): 20
100 Sprachverarbeitungsklopfen (2020): 27
100 Sprachverarbeitungsklopfen (2020): 46
100 Sprachverarbeitungsklopfen (2020): 21
100 Sprachverarbeitungsklopfen (2020): 36
Die Bildverarbeitung mit Python 100 führt zu einem durchschnittlichen Pooling von # 7
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
100 Amateur-Sprachverarbeitungsklopfen: 41
100 Amateur-Sprachverarbeitungsklopfen: 56
100 Amateur-Sprachverarbeitungsklopfen: 24
100 Amateur-Sprachverarbeitungsklopfen: 50
100 Amateur-Sprachverarbeitungsklopfen: 59
100 Amateur-Sprachverarbeitungsklopfen: 70
Bildverarbeitung mit MyHDL
100 Amateur-Sprachverarbeitungsklopfen: 62
100 Amateur-Sprachverarbeitungsklopfen: 92
100 Amateur-Sprachverarbeitungsklopfen: 06
100 Amateur-Sprachverarbeitungsklopfen: 81
100 Amateur-Sprachverarbeitungsklopfen: 46
100 Amateur-Sprachverarbeitungsklopfen: 88
100 Amateur-Sprachverarbeitungsklopfen: 89
100 Amateur-Sprachverarbeitungsklopfen: 43
100 Amateur-Sprachverarbeitungsklopfen: 55
100 Amateur-Sprachverarbeitungsklopfen: 94
100 Amateur-Sprachverarbeitungsklopfen: 54
Erste Python-Bildverarbeitung
100 Amateur-Sprachverarbeitungsklopfen: 63
100 Amateur-Sprachverarbeitungsklopfen: 78