将颜色应用于渐变方向

关于此帖子,当在图像上硬编码颜色的渐变方向的度数时,应将强度发生变化的位置涂上颜色,而没有变化的位置应将图像涂成黑色。


我不确定在那个帖子中是如何实现的。由于为所有度值分配了一种颜色,因此可以为图像中的所有像素着色,并且不会留下任何黑色。


我的代码如下:


# where gray_blur is a grayscale image of dimension 512 by 512


# 3x3 sobel filters for edge detection

sobel_x = np.array([[ -1, 0, 1], 

                   [ -2, 0, 2], 

                   [ -1, 0, 1]])



sobel_y = np.array([[ -1, -2, -1], 

                   [ 0, 0, 0], 

                   [ 1, 2, 1]])



# Filter the orginal and blurred grayscale images using filter2D

filtered = cv2.filter2D(gray_noise, cv2.CV_32F, sobel_x)


filtered_blurred_x = cv2.filter2D(gray_blur, cv2.CV_32F, sobel_x)  

filtered_blurred_y = cv2.filter2D(gray_blur, cv2.CV_32F, sobel_y) 


# Compute the orientation of the image

orien = cv2.phase(filtered_blurred_x, filtered_blurred_y, angleInDegrees=True)


image_map = np.zeros((orien.shape[0], orien.shape[1], 3), dtype=np.int16)


# Define RGB colours

red = np.array([255, 0, 0])

cyan = np.array([0, 255, 255])

green = np.array([0, 255, 0])

yellow = np.array([255, 255, 0])


# Set colours corresponding to angles

for i in range(0, image_map.shape[0]):

    for j in range(0, image_map.shape[1]):

        if orien[i][j] < 90.0:

            image_map[i, j, :] = red

        elif orien[i][j] >= 90.0 and orien[i][j] < 180.0:

            image_map[i, j, :] = cyan

        elif orien[i][j] >= 180.0 and orien[i][j] < 270.0:

            image_map[i, j, :] = green

        elif orien[i][j] >= 270.0 and orien[i][j] < 360.0:

            image_map[i, j, :] = yellow


# Display gradient orientation

f, ax1 = plt.subplots(1, 1, figsize=(20,10))


ax1.set_title('gradient orientation')

ax1.imshow(image_map)

我的代码在左侧产生输出,而我相信正确的表示形式将是右侧的图像:

http://img1.mukewang.com/60a38481000186ec10410487.jpg

我想我缺少将每个像素硬编码为其中一种颜色的方法。


Cats萌萌
浏览 125回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python