목표 화 처리 마스터! 화상 처리 100개 노크 했던 Part2:오쓰의 2치화
12925 단어 초보자목표화 처리 마스터 시리즈이미지 처리
htps : // 이 m / 요요 요 / ms / 2에 f53f47f87dcf5d1에 14
공부하면서 노크의 속도가 느립니다.
Q4:오쓰의 2치화
오쓰의 2 치화는 뭐야
우선, 2치화에도 여러가지? ? ? 에서 시작입니다.
우선 여러 사람이 정리해 주시는 것을 읽었습니다.
여기에서 이해한 오쓰의 2치화란
이미지에 밝은 이미지 사이트와 어두운 사이트의 두 클래스가 있다고 가정하여 가장 높은 클래스의 분리도를 갖도록 임계 값을 자동으로 결정하는 이진 필터
그레이 스케일 이미지를 입력으로 사용하고 히스토그램에서 이진화 임계 값을 자동으로 결정합니다.
절차로서는 다음과 같이 될 것이라고 이해했습니다.
결국 무엇이 좋을까
밝은 부분과 어두운 부분이 뚜렷하고 히스토그램에 계곡이 있는 것 같은 이미지에 사용하면 좋은 방법인 것 같네요. 비교해 보겠습니다.
일단 이모리 씨에서 과제를 해본다.
import cv2
import numpy as np
# 大津の2値化
def otsu_binarization(img):
max_sigma = 0
max_t = 0
H, W = img.shape
# tきめるループ
for t in range(1, 256):
v0 = Y[np.where(Y < t)]
m0 = np.mean(v0) if len(v0) > 0 else 0.
w0 = len(v0) / (H * W)
v1 = Y[np.where(Y >= t)]
m1 = np.mean(v1) if len(v1) > 0 else 0.
w1 = len(v1) / (H * W)
sigma = w0 * w1 * ((m0 - m1) ** 2)
if sigma > max_sigma:
max_sigma = sigma
max_t = t
print("threshold >>", max_t)
th = max_t
Y[Y < th] = 0
Y[Y >= th] = 255
return Y
img = cv2.imread("imori.jpg")
#グレスケ
# 値だけ渡したい
r = img[:,:,2].copy()
g = img[:,:,1].copy()
b = img[:,:,0].copy()
#Y = 0.2126 R + 0.7152 G + 0.0722 Bより
Y = 0.2126*r + 0.7152*g + 0.0722*b
#整数に型変換---画像は整数値しか取らない
Y = Y.astype(np.uint8)
out = otsu_binarization(Y)
cv2.imwrite("anspic_q4.jpg", out)
cv2.imshow("result", out)
cv2.waitKey(0)
cv2.destroyAllWindows()
실행 결과
python q4.py
threshold >> 127
다음에 비교 검토해 가고 싶습니다.
내 프로필 사진 사용합니다. (크기로 인해 압축되어 트리밍)
히스토그램을 찾아보십시오. 참고로 써 주시고 있는 프로그램대로이므로 할애합니다.
그레이 스케일 화상, Q3의 2치화, 오쓰의 2치화로 비교해 본다
그레스케
Q3의 2치화
오쓰의 2치화
threshold >> 125
... 이미지가 좋지 않았다!
덤:출,출~! ! matplotlib의 NO BACKEND ERROR
뭔가 전에도 직면한 적이 있었는데, 처음 히스토그램을 그리려고 하면 backend error라는 에러가 나와 그려주지 못했습니다.
이것은 말 그대로 백엔드가 맞지 않기 때문에 안되는 것 같은 에러로, matplotlibrc내에 쓰여져 있는 백엔드를 바꾸어 주면 움직입니다.
하지만 이번 도커 환경이므로 일단 참고까지 써 둡니다.
어쩌면 여기에 있습니다. 없으면 find에서 찾아주세요.
/usr/local/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
에디터에서 열어보면 비교적 초반에 백엔드에 대해 쓰여지는 부분이 있습니다.
(前略)
## ***************************************************************************
## * BACKENDS *
## ***************************************************************************
## The default backend. If you omit this parameter, the first working
## backend from the following list is used:
## MacOSX Qt5Agg Qt4Agg Gtk3Agg TkAgg WxAgg Agg
## Other choices include:
## Qt5Cairo Qt4Cairo GTK3Cairo TkCairo WxCairo Cairo Wx
## PS PDF SVG Template
## You can also deploy your own backend outside of matplotlib by referring to
## the module name (which must be in the PYTHONPATH) as 'module://my_backend'.
#backend : Agg
(後略)
참고와 상기 코멘트가 되어 변경합니다
전 변경했을 때 TkAgg로 한 기억이 있으므로 코멘트 아웃 지워 다음과 같이 변경
backend : TkAgg
실행하려고하면 오류가 발생합니다.
Traceback (most recent call last):
File "hist.py", line 2, in <module>
import matplotlib.pyplot as plt
File "/usr/local/lib/python3.7/site-packages/matplotlib/pyplot.py", line 2282, in <module>
switch_backend(rcParams["backend"])
File "/usr/local/lib/python3.7/site-packages/matplotlib/pyplot.py", line 221, in switch_backend
backend_mod = importlib.import_module(backend_name)
File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/usr/local/lib/python3.7/site-packages/matplotlib/backends/backend_tkagg.py", line 1, in <module>
from . import _backend_tk
File "/usr/local/lib/python3.7/site-packages/matplotlib/backends/_backend_tk.py", line 6, in <module>
import tkinter as tk
File "/usr/local/lib/python3.7/tkinter/__init__.py", line 36, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
ImportError: libtk8.6.so: cannot open shared object file: No such file or directory
tk가 없어서 화가 나서 넣어
apt install python3-tk
그리고 프로그램 실행
제대로 그릴 수있었습니다!
다른 백엔드 사용해도 아무것도 없어! 라고 화가 난다고 생각하므로, 매번 패키지 넣으면 좋다고 생각합니다. 이럴 때 로컬 환경 더러움 없는 docker 엄청 편리
결론
내 맥은 열심히 오쓰의 2치화를 「대각에 피인가」로 변환합니다. 멋지다
이 페이스로 하고 있으면 평생 끝나는 생각이 든다!
Reference
이 문제에 관하여(목표 화 처리 마스터! 화상 처리 100개 노크 했던 Part2:오쓰의 2치화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kiii142/items/ffe5d0ed71f86f2508db
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/usr/local/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
(前略)
## ***************************************************************************
## * BACKENDS *
## ***************************************************************************
## The default backend. If you omit this parameter, the first working
## backend from the following list is used:
## MacOSX Qt5Agg Qt4Agg Gtk3Agg TkAgg WxAgg Agg
## Other choices include:
## Qt5Cairo Qt4Cairo GTK3Cairo TkCairo WxCairo Cairo Wx
## PS PDF SVG Template
## You can also deploy your own backend outside of matplotlib by referring to
## the module name (which must be in the PYTHONPATH) as 'module://my_backend'.
#backend : Agg
(後略)
backend : TkAgg
Traceback (most recent call last):
File "hist.py", line 2, in <module>
import matplotlib.pyplot as plt
File "/usr/local/lib/python3.7/site-packages/matplotlib/pyplot.py", line 2282, in <module>
switch_backend(rcParams["backend"])
File "/usr/local/lib/python3.7/site-packages/matplotlib/pyplot.py", line 221, in switch_backend
backend_mod = importlib.import_module(backend_name)
File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/usr/local/lib/python3.7/site-packages/matplotlib/backends/backend_tkagg.py", line 1, in <module>
from . import _backend_tk
File "/usr/local/lib/python3.7/site-packages/matplotlib/backends/_backend_tk.py", line 6, in <module>
import tkinter as tk
File "/usr/local/lib/python3.7/tkinter/__init__.py", line 36, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
ImportError: libtk8.6.so: cannot open shared object file: No such file or directory
apt install python3-tk
내 맥은 열심히 오쓰의 2치화를 「대각에 피인가」로 변환합니다. 멋지다
이 페이스로 하고 있으면 평생 끝나는 생각이 든다!
Reference
이 문제에 관하여(목표 화 처리 마스터! 화상 처리 100개 노크 했던 Part2:오쓰의 2치화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kiii142/items/ffe5d0ed71f86f2508db텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)