2013-04-06 34 views
9

Tôi đang cố gắng sử dụng scipy để làm erosiondilation của hình ảnh. Dường như khá đơn giản khi sử dụng scipy ->binary_erosion/dialation. Tuy nhiên, đầu ra không phải là ở tất cả những gì được mong đợi.Xói mòn hình ảnh và giãn nở với Scipy

Đây là mã cơ bản của tôi:

import scipy 
from scipy import ndimage 
import matplotlib.pyplot as plt 
import numpy as np 
import Image 

#im = Image.open('flower.png') 
im = ndimage.imread('flower.png') 
im = ndimage.binary_erosion(im).astype(np.float32) 
scipy.misc.imsave('erosion.png', im) 


im2 = Image.open('flower.png') 
im2 = ndimage.binary_dilation(im2) 
scipy.misc.imsave('dilation.png', im2) 

Đây là kết quả:

enter image description here

Kết quả cho sự giãn nở chỉ là một hình ảnh hoàn toàn trắng cho bản gốc "flower.png"

Tôi tin rằng tôi phải chỉ định hạt nhân hoặc mặt nạ tốt hơn nhưng không thực sự chắc chắn lý do tại sao tôi nhận được đầu ra màu xanh lá cây cho xói mòn và hoàn toàn whi te đầu ra cho giãn nở.

+1

toán tử nhị phân mong đợi đầu vào nhị phân không giống như của bạn – theta

Trả lời

9

Tôi đã sử dụng sự xói mòn nhị phân thay vì mảng grey erosion. Tôi chuyển đổi hình ảnh ban đầu để thang màu xám bằng cách sử dụng flatten=true như vậy:

im = scipy.misc.imread('flower.png', flatten=True).astype(np.uint8) 

sau đó được gọi là:

im1 = ndimage.grey_erosion(im, size=(15,15)) 

Và có một bức tranh độc đáo bị xói mòn, mặc dù nó là màu xám.

2

Bạn có hai vấn đề: như đã nêu trong nhận xét của @theta, ops nhị phân mong đợi đầu vào chỉ bao gồm 0 và 1. Vấn đề thứ hai là nd trong ndimage --- bạn cung cấp trong một mảng có hình dạng (nx, ny, 3). Trục dài-3 cuối cùng được coi là thứ nguyên không gian thứ ba, không phải là ba kênh màu.

Các vấn đề liên quan