2013-08-25 3 views
2

나는 중간 필터를 위해 파이썬 프로그램을 만들려고합니다. 이 기사는 http://www.programming-techniques.com/2013/02/median-filter-using-c-and-opencv-image.html이므로 파이썬 코드로 변환하려고합니다. 파이썬과 OpenCV로 메디안 필터

이이 중간 필터 전에 사진입니다

from cv2 import * #Import functions from OpenCV 
import cv2 

if __name__ == '__main__': 
    source = cv2.imread("Medianfilterp.png", CV_LOAD_IMAGE_GRAYSCALE) 
    final = source[:] 
    for y in range(len(source)): 
     for x in range(y): 
      final[y,x]=source[y,x] 

    members=[source[0,0]]*9 
    for y in range(1,len(source)-1): 
     for x in range(1,y-1): 
      members[0] = source[y-1,x-1] 
      members[1] = source[y,x-1] 
      members[2] = source[y+1,x-1] 
      members[3] = source[y-1,x] 
      members[4] = source[y,x] 
      members[5] = source[y+1,x] 
      members[6] = source[y-1,x+1] 
      members[7] = source[y,x+1] 
      members[8] = source[y+1,x+1] 

      members.sort() 
      final[y,x]=members[4] 

    cv.NamedWindow('Source_Picture', cv.CV_WINDOW_AUTOSIZE) 
    cv.NamedWindow('Final_Picture', cv.CV_WINDOW_AUTOSIZE) 
    cv2.imshow('Source_Picture', source) #Show the image 
    cv2.imshow('Final_Picture', final) #Show the image 
    cv2.waitKey() 

파이썬 코드

: source picture

그러나 나는 가지고 이상한 결과, 프로그램의 결과 : final picture

답변

7

우선 , 나는 당신이 re-invent the wheel가 아닌 것이 좋습니다. OpenCV에는 이미 중간 필터링을 수행하는 방법이 포함되어 있습니다.

final = cv2.medianBlur(source, 3) 

즉, 구현상의 문제는 반복 범위에 있습니다. y 범위가 맞습니다. 그러나 for x in range(1,y-1):은 현재 y 값까지만 반복하며 이미지의 전체 범위는 x이 아닙니다. 이것은 왜 필터가 이미지의 왼쪽 하단에있는 삼각형 영역에만 적용되는지 설명합니다.

for y in range(1,source.shape[0]-1): 
    for x in range(1,source.shape[1]-1): 

이 전체 이미지에 필터를 적용합니다 : : 그런 다음 이상 반복 할 수있는 이미지 크기를 얻기 위해 (정말 그냥 NumPy와 배열) 이미지의 shape 필드를 사용할 수 있습니다

Median filter result

+0

그냥 함수를 호출하는 것이 아니라 메디안 필터를 수행하는 방법을 배우고 싶습니다. 고마워 .. 나는 그걸 알아 차리지 못했다. 하 .. 하 .. .. 내 문제를 해결하지만, 새로운 문제가 생겼어. 사진을 반쯤 자르면, 밖의 목록이 나온다. 왜 그런지 알아? –

+0

@mas_bejo 아마 별 문제를 해결하면 가장 잘 해결할 수 있습니다. 새로운 문제는 좀 더 설명이 필요하며 댓글은 실제로 그런 부분이 아닙니다. – Aurelius

+0

도움 주셔서 감사합니다. 나는 그 후자에 관한 질문을 게시 할 것입니다 ... –