Thủ Thuật

Shape là gì, nghĩa của từ shape | từ điển anh – việt

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Giới thiệu: Một chút về Pixel

Máy tính lưu trữ hình ảnh như một bức tranh khảm của các ô vuông nhỏ. Điều này giống như hình thức nghệ thuật cổ xưa của gạch khảm, hoặc bộ dụng cụ hạt tan chảy mà trẻ em chơi với ngày nay. Bây giờ, nếu những ô vuông này quá lớn, thì thật khó để tạo ra các cạnh và đường cong mượt mà. Chúng ta càng sử dụng nhiều gạch nhỏ hơn, mịn hơn hoặc như chúng ta nói ít pixel hơn, hình ảnh sẽ có. Chúng đôi khi được gọi là độ phân giải của hình ảnh.

Đồ họa vector là một phương pháp lưu trữ hình ảnh hơi khác nhau nhằm tránh các vấn đề liên quan đến pixel. Nhưng ngay cả hình ảnh vector, cuối cùng, được hiển thị dưới dạng khảm các pixel. Pixel từ có nghĩa là một yếu tố hình ảnh . Một cách đơn giản để mô tả mỗi pixel là sử dụng kết hợp ba màu, cụ thể là Red, Green, Blue. Đây là những gì chúng ta gọi là một RGBhình ảnh.

Trong một hình ảnh RGB, mỗi pixel được biểu thị bằng ba 8 bitsố được liên kết với các giá trị Red, Green, Bluetương ứng. Cuối cùng, bằng cách sử dụng kính lúp, nếu chúng ta phóng to hình ảnh, chúng ta sẽ thấy hình ảnh được tạo thành từ những chấm nhỏ của ánh sáng nhỏ hoặc cụ thể hơn là các pixel. Điều thú vị hơn là thấy rằng những chấm nhỏ của ánh sáng nhỏ thực sự là nhiều chấm nhỏ của ánh sáng nhỏ có màu sắc khác nhau, không gì khác ngoài Red, Green, Bluecác kênh.

Pixel cùng nhau từ xa tạo ra một hình ảnh và trả trước, chúng chỉ là những đèn nhỏ BẬT và TẮT . Sự kết hợp của những thứ tạo ra hình ảnh và về cơ bản những gì chúng ta thấy trên màn hình mỗi ngày.

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Mỗi bức ảnh, ở dạng kỹ thuật số, được tạo thành từ các pixel. Chúng là đơn vị thông tin nhỏ nhất tạo nên một bức tranh. Thông thường hình tròn hoặc hình vuông, chúng thường được sắp xếp theo dạng lưới 2 chiều.

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Bây giờ, nếu cả ba giá trị đều ở cường độ tối đa, điều đó có nghĩa là 255. Sau đó, nó hiển thị dưới dạng màu trắng và nếu cả ba màu bị tắt hoặc có giá trị 0, màu sẽ hiển thị là màu đen. Sự kết hợp của ba thứ này sẽ lần lượt cho chúng ta một sắc thái cụ thể của màu pixel. Vì mỗi số là một số 8 bit , nên các giá trị nằm trong khoảng 0-255.

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Sự kết hợp của ba màu này có xu hướng giá trị cao nhất trong số chúng. Vì mỗi giá trị có thể có 256 giá trị cường độ hoặc độ sáng khác nhau, nó tạo ra 16,8 triệu sắc thái tổng.

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Ở đây, chúng tôi sẽ quan sát một số điều sau đây, đó là phân tích dữ liệu hình ảnh cơ bản rất cơ bản với Numpyvà một số mối quan tâm về nhịp tim Python, như imageio, matplotlibv.v.

  • Nhập hình ảnh và quan sát thuộc tính của nó
  • Tách các lớp
  • Tòa nhà màu xám
  • Sử dụng toán tử logic trên các giá trị pixel
  • Tạo mặt nạ bằng Toán tử logic
  • Phân tích dữ liệu ảnh vệ tinh

Nhập ảnh

Bây giờ hãy tải một hình ảnh và quan sát các thuộc tính khác nhau của nó nói chung.

if __name__ == '__main__':
    import imageio
    import matplotlib.pyplot as plt
    %matplotlib inline

    pic = imageio.imread('F:/demo_2.jpg')
    plt.figure(figsize = (15,15))

    plt.imshow(pic)

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Quan sát các thuộc tính cơ bản của hình ảnh

print('Type of the image : ' , type(pic))

print('Shape of the image : {}'.format(pic.shape))
print('Image Hight {}'.format(pic.shape[0]))
print('Image Width {}'.format(pic.shape[1]))
print('Dimension of Image {}'.format(pic.ndim))
Type of the image :  

Shape of the image : (562, 960, 3)
Image Hight 562
Image Width 960
Dimension of Image 3

Hình dạng của ndarray cho thấy nó là một ma trận ba lớp. Hai số đầu tiên ở đây là chiều dài và chiều rộng và số thứ ba (tức là 3) dành cho ba lớp : Red, Green, Blue. Vì vậy, nếu chúng ta tính kích thước của hình ảnh RGB, tổng kích thước sẽ được tính làheight x width x 3

print('Image size {}'.format(pic.size))
print('Maximum RGB value in this image {}'.format(pic.max()))
print('Minimum RGB value in this image {}'.format(pic.min()))
Image size 1618560
Maximum RGB value in this image 255
Minimum RGB value in this image 0

Các giá trị này rất quan trọng để xác minh vì cường độ màu tám bit không thể nằm ngoài phạm vi từ 0 đến 255.

Xem Thêm :  Top 25 phim kinh dị hay nhiều người xem nhất mọi thời đại

Bây giờ, bằng cách sử dụng biến được gán hình ảnh, chúng tôi cũng có thể truy cập bất kỳ giá trị pixel cụ thể nào của hình ảnh và có thể truy cập thêm từng kênh RGB riêng biệt.

'''
Let's pick a specific pixel located at 100 th Rows and 50 th Column. 
And view the RGB value gradually. 
'''
pic[ 100, 50 ]
Image([109, 143,  46], dtype=uint8)

Trong trường hợp này: R = 109; G = 143; B = 46 và chúng ta có thể nhận ra rằng pixel đặc biệt này có rất nhiều màu XANH LÁ trong đó. Bây giờ, chúng tôi cũng có thể đã chọn một trong những số này một cách cụ thể bằng cách đưa ra giá trị chỉ mục của ba kênh này. Bây giờ chúng tôi biết điều này:

  • giá trị chỉ mục cho kênh Đỏ
  • 1giá trị chỉ mục cho kênh Xanh
  • 2giá trị chỉ mục cho kênh Blue

Tuy nhiên, thật tốt khi biết rằng trong OpenCV, Hình ảnh không phải là RGB mà là BGR. imageio.imreadtải hình ảnh dưới dạng RGB (hoặc RGBA), nhưng OpenCV giả định hình ảnh là BGR hoặc BGRA (BGR là định dạng màu OpenCV mặc định).

# A specific pixel located at Row : 100 ; Column : 50 
# Each channel's value of it, gradually R , G , B
print('Value of only R channel {}'.format(pic[ 100, 50, 0]))
print('Value of only G channel {}'.format(pic[ 100, 50, 1]))
print('Value of only B channel {}'.format(pic[ 100, 50, 2]))
Value of only R channel 109
Value of only G channel 143
Value of only B channel 46

Được rồi, bây giờ hãy xem nhanh từng kênh trong toàn bộ hình ảnh.

plt.title('R channel')
plt.ylabel('Height {}'.format(pic.shape[0]))
plt.xlabel('Width {}'.format(pic.shape[1]))

plt.imshow(pic[ : , : , 0])
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

plt.title('G channel')
plt.ylabel('Height {}'.format(pic.shape[0]))
plt.xlabel('Width {}'.format(pic.shape[1]))

plt.imshow(pic[ : , : , 1])
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

plt.title('B channel')
plt.ylabel('Height {}'.format(pic.shape[0]))
plt.xlabel('Width {}'.format(pic.shape[1]))

plt.imshow(pic[ : , : , 2])
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Bây giờ, chúng ta cũng có thể thay đổi số lượng giá trị RGB. Ví dụ: hãy đặt lớp Đỏ, Xanh lục, Xanh lam để theo các giá trị Hàng thành cường độ đầy đủ.

  • Kênh R: Hàng – 100 đến 110
  • Kênh G: Hàng – 200 đến 210
  • Kênh B: Hàng – 300 đến 310

Chúng tôi sẽ tải hình ảnh một lần để chúng tôi có thể hình dung từng thay đổi cùng một lúc.

pic = imageio.imread('F:/demo_2.jpg')

pic[50:150 , : , 0] = 255 # full intensity to those pixel's R channel
plt.figure( figsize = (10,10))
plt.imshow(pic)
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

pic[200:300 , : , 1] = 255 # full intensity to those pixel's G channel
plt.figure( figsize = (10,10))
plt.imshow(pic)
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

pic[350:450 , : , 2] = 255 # full intensity to those pixel's B channel
plt.figure( figsize = (10,10))
plt.imshow(pic)
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Để làm rõ hơn, chúng ta cũng hãy thay đổi phần cột và lần này chúng ta sẽ thay đổi kênh RGB cùng một lúc.

# set value 200 of all channels to those pixels which turns them to white
pic[ 50:450 , 400:600 , [0,1,2] ] = 200 
plt.figure( figsize = (10,10))
plt.imshow(pic)
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Chia lớp

Bây giờ, chúng ta biết rằng mỗi pixel của hình ảnh được đại diện bởi ba số nguyên. Việc tách hình ảnh thành các thành phần màu riêng biệt chỉ là vấn đề kéo ra lát cắt chính xác của mảng hình ảnh.

import numpy as np
pic = imageio.imread('F:/demo_2.jpg')

fig, ax = plt.subplots(nrows = 1, ncols=3, figsize=(15,5))

for c, ax in zip(range(3), ax):

    # create zero matrix
    split_img = np.zeros(pic.shape, dtype="uint8") # 'dtype' by default: 'numpy.float64'

    # assing each channel 
    split_img[ :, :, c] = pic[ :, :, c]

    # display each channel
    ax.imshow(split_img)

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Tòa nhà màu xám

Hình ảnh đen trắng được lưu trữ trong mảng 2 chiều. Có hai loại hình ảnh đen trắng:

  • Greyscale: Phạm vi sắc thái của màu xám: ~255
  • Nhị phân: Pixel có màu đen hoặc trắng: hoặc255

Bây giờ, Gre chọc trời là một quá trình mà một hình ảnh được chuyển đổi từ một màu đầy đủ sang các sắc thái của màu xám. Ví dụ, trong các công cụ xử lý hình ảnh: trong OpenCV, nhiều chức năng sử dụng hình ảnh thang độ xám trước khi xử lý và điều này được thực hiện vì nó đơn giản hóa hình ảnh, hoạt động gần như giảm nhiễu và tăng thời gian xử lý vì có ít thông tin hơn trong hình ảnh.

Xem Thêm :  Sửa lỗi không vào được store trên win 10 bị lỗi, đây là cách khắc phục

Có một số cách để thực hiện điều này trong python để chuyển đổi hình ảnh thành thang độ xám , nhưng cách sử dụng matplotlib đơn giản là lấy giá trị trung bình của giá trị RGB của hình ảnh gốc bằng công thức này .

Y' = 0.299 R + 0.587 G + 0.114 B
pic = imageio.imread('F:/demo_2.jpg')

gray = lambda rgb : np.dot(rgb[... , :3] , [0.299 , 0.587, 0.114]) 
gray = gray(pic)  

plt.figure( figsize = (10,10))
plt.imshow(gray, cmap = plt.get_cmap(name = 'gray'))
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Tuy nhiên, phần mềm chuyển đổi màu GIMP sang màu xám có ba thuật toán để thực hiện nhiệm vụ.

Độ sáng Graylevel sẽ được tính là

Lightness = ½ × (max(R,G,B) + min(R,G,B))

Độ sáng Độ xám sẽ được tính như

Luminosity = 0.21 × R + 0.72 × G + 0.07 × B

Trung bình Graylevel sẽ được tính là

Average Brightness = (R + G + B) ÷ 3

Hãy thử một trong những thuật toán của họ. Làm thế nào về độ sáng?

pic = imageio.imread('F:/demo_2.jpg')

gray = lambda rgb : np.dot(rgb[... , :3] , [0.21 , 0.72, 0.07]) 
gray = gray(pic)  

plt.figure( figsize = (10,10))
plt.imshow(gray, cmap = plt.get_cmap(name = 'gray'))
plt.show()

'''
Let's take a quick overview some the changed properties now the color image.
Like we observe some properties of color image, same statements are applying 
now for gray scaled image.
'''

print('Type of the image : ' , type(gray))
print()

print('Shape of the image : {}'.format(gray.shape))
print('Image Hight {}'.format(gray.shape[0]))
print('Image Width {}'.format(gray.shape[1]))
print('Dimension of Image {}'.format(gray.ndim))
print()

print('Image size {}'.format(gray.size))
print('Maximum RGB value in this image {}'.format(gray.max()))
print('Minimum RGB value in this image {}'.format(gray.min()))
print('Random indexes [X,Y] : {}'.format(gray[100, 50]))

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

 Type of the image : 

Shape of the image : (562,960)
Image Height 562
Image Widht 960
Dimension of Image 2

Image size 539520
Maximum RGB value in this image 254.9999999997
Minimum RGB value in this image 0.0
Random indexes [X,Y] : 129.07

Sử dụng toán tử logic để xử lý các giá trị pixel

Chúng ta có thể tạo một ndarray bullion trong cùng kích thước bằng cách sử dụng một toán tử logic . Tuy nhiên, điều này sẽ không tạo ra bất kỳ mảng mới nào, nhưng nó chỉ đơn giản trở về Truebiến chủ của nó. Ví dụ: hãy xem xét chúng tôi muốn lọc ra một số pixel có giá trị thấp hoặc giá trị cao hoặc (bất kỳ điều kiện nào) trong hình ảnh RGB, và vâng, thật tuyệt vời khi chuyển đổi RGB sang thang độ xám, nhưng bây giờ, chúng tôi sẽ không đi cho điều đó hơn là đối phó với một hình ảnh màu.

Trước tiên hãy tải một hình ảnh và hiển thị nó trên màn hình.

pic = imageio.imread('F:/demo_1.jpg')
plt.figure(figsize = (10,10))
plt.imshow(pic)
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Được rồi, hãy xem xét hình ảnh kết xuất này. Bây giờ, trong mọi trường hợp, chúng tôi muốn lọc ra tất cả các giá trị pixel, thấp hơn, giả sử, 20. Đối với điều này, chúng tôi sẽ sử dụng một toán tử logic để thực hiện nhiệm vụ này, chúng tôi sẽ trả về làm giá trị của Truecho tất cả các chỉ số.

low_pixel = pic < 20

# to ensure of it let's check if all values in low_pixel are True or not
if low_pixel.any() == True:
    print(low_pixel.shape)

(1079, 1293, 3)

Như chúng ta đã nói, một biến chủ không được sử dụng theo truyền thống, nhưng tôi đề cập đến nó bởi vì nó hoạt động. Nó chỉ giữ giá trị thật và không có gì khác. Vì vậy, nếu chúng ta thấy shapecả hai low_pixelpic, chúng ta sẽ thấy rằng cả hai đều giống nhau shape.

print(pic.shape)
print(low_pixel.shape)

(1079, 1293, 3)
(1079, 1293, 3)

Chúng tôi đã tạo bộ lọc giá trị thấp đó bằng cách sử dụng toán tử so sánh toàn cục cho tất cả các giá trị nhỏ hơn 200. Tuy nhiên, chúng tôi có thể sử dụng low_pixelmảng này làm chỉ mục để đặt các giá trị thấp đó thành một số giá trị cụ thể, có thể cao hơn hoặc thấp hơn trước đó giá trị pixel.

# randomly choose a value 
import random

# load the orginal image
pic = imageio.imread('F:/demo_1.jpg')

# set value randomly range from 25 to 225 - these value also randomly choosen
pic[low_pixel] = random.randint(25,225)

# display the image
plt.figure( figsize = (10,10))
plt.imshow(pic)
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Mặt nạ

Mặt nạ hình ảnh là một kỹ thuật xử lý hình ảnh được sử dụng để loại bỏ nền mà từ đó các bức ảnh có các cạnh mờ, trong suốt hoặc các phần tóc.

Xem Thêm :  Các kiểu tóc uốn đuôi lọn to – tất tần tật thông tin về

Bây giờ, chúng ta sẽ tạo một mặt nạ có hình đĩa tròn. Trước tiên, chúng tôi sẽ đo khoảng cách từ trung tâm của hình ảnh đến mọi giá trị pixel viền. Và chúng tôi lấy một giá trị bán kính thuận tiện, sau đó sử dụng toán tử logic, chúng tôi sẽ tạo một đĩa tròn. Nó khá đơn giản, hãy xem mã.

if __name__ == '__main__':

    # load the image
    pic = imageio.imread('F:/demo_1.jpg')

    # seperate the row and column values
    total_row , total_col , layers = pic.shape

    '''
    Create vector.

    Ogrid is a compact method of creating a multidimensional-
    ndarray operations in single lines.
    for ex:

    >>> ogrid[0:5,0:5]
    output: [array([[0],
                    [1],
                    [2],
                    [3],
                    [4]]), 
            array([[0, 1, 2, 3, 4]])]

    '''
    x , y = np.ogrid[:total_row , :total_col]

    # get the center values of the image
    cen_x , cen_y = total_row/2 , total_col/2


    '''
    Measure distance value from center to each border pixel.
    To make it easy, we can think it's like, we draw a line from center-
    to each edge pixel value --> s**2 = (Y-y)**2 + (X-x)**2 
    '''
    distance_from_the_center = np.sqrt((x-cen_x)**2 + (y-cen_y)**2)

    # Select convenient radius value
    radius = (total_row/2)

    # Using logical operator '>' 
    '''
    logical operator to do this task which will return as a value 
    of True for all the index according to the given condition
    '''
    circular_pic = distance_from_the_center > radius

    '''
    let assign value zero for all pixel value that outside the cirular disc.
    All the pixel value outside the circular disc, will be black now.
    '''
    pic[circular_pic] = 0
    plt.figure(figsize = (10,10))
    plt.imshow(pic) 
    plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Xử lý ảnh vệ tinh

Một trong những khóa học MOOC trên edX, chúng tôi đã giới thiệu một số hình ảnh vệ tinh và hệ thống xử lý của nó. Tất nhiên là rất nhiều thông tin. Tuy nhiên, hãy thực hiện một vài nhiệm vụ phân tích về nó.

# load the image
pic = imageio.imread('F:\satimg.jpg')
plt.figure(figsize = (10,10))
plt.imshow(pic)
plt.show()

Phân tích dữ liệu hình ảnh cơ bản bằng Python: Phần 1

Chúng ta hãy xem một số thông tin cơ bản:

print(f'Shape of the image {pic.shape}')
print(f'hieght {pic.shape[0]} pixels')
print(f'width {pic.shape[1]} pixels')

Shape of the image (3725, 4797, 3)
hieght 3725 pixels
width 4797 pixels

Có một cái gì đó thú vị về hình ảnh này. Giống như nhiều hình ảnh trực quan khác, màu sắc trong mỗi lớp RGB có ý nghĩa gì đó. Ví dụ: cường độ của màu đỏ sẽ là một dấu hiệu cho thấy độ cao của điểm dữ liệu địa lý trong pixel. Cường độ của màu xanh sẽ biểu thị thước đo của khía cạnh và màu xanh lá cây sẽ biểu thị độ dốc. Những màu này sẽ giúp truyền đạt thông tin này một cách nhanh chóng và hiệu quả hơn là hiển thị số.

  • Pixel đỏ cho biết: Độ cao
  • Pixel màu xanh biểu thị: Aspect
  • Pixel màu xanh lá cây biểu thị: Độ dốc

Có điều, chỉ cần nhìn vào hình ảnh đầy màu sắc này, một con mắt được đào tạo có thể biết được độ cao là gì, độ dốc là gì và khía cạnh là gì. Vì vậy, đó là ý tưởng tải một số ý nghĩa hơn cho các màu này để chỉ ra một cái gì đó khoa học hơn.

Phát hiện pixel cao của mỗi kênh

# Only Red Pixel value , higher than 180
pic = imageio.imread('F:\satimg.jpg')
red_mask = pic[:, :, 0] < 180

pic[red_mask] = 0
plt.figure(figsize=(15,15))
plt.imshow(pic)


# Only Green Pixel value , higher than 180
pic = imageio.imread('F:\satimg.jpg')
green_mask = pic[:, :, 1] < 180

pic[green_mask] = 0
plt.figure(figsize=(15,15))
plt.imshow(pic)


# Only Blue Pixel value , higher than 180
pic = imageio.imread('F:\satimg.jpg')
blue_mask = pic[:, :, 2] < 180

pic[blue_mask] = 0
plt.figure(figsize=(15,15))
plt.imshow(pic)

# Composite mask using logical_and
pic = imageio.imread('F:\satimg.jpg')
final_mask = np.logical_and(red_mask, green_mask, blue_mask)
pic[final_mask] = 40
plt.figure(figsize=(15,15))
plt.imshow(pic)

Tiếp tục...


Từ vựng Tiếng Anh các Hình dạng, Hình khối/ Shapes Name In English/ English Online (New)


Chủ đề các Hình học trong tiếng Anh mình đã từng làm 01 video rồi, nhưng trong video này mình đã cải tiến cho đọc từ vựng 3 lần để giúp các bạn học từ vựng tốt hơn.
Hi vọng các bạn thích video này. Cảm ơn các bạn đã ủng hộ kênh.
Chúc các bạn học tốt và thành công.
Facebook page: Từ Vựng Tiếng Anh English vocabulary
https://www.facebook.com/profile.php?id=100063188352971

Xem thêm bài viết thuộc chuyên mục: Thủ Thuật
Xem thêm bài viết thuộc chuyên mục: Thủ Thuật

Related Articles

Back to top button