Binarization, μ΄μ§ν
threshold κ°μ μ ν ν, νμͺ½μ 0μΌλ‘ λ€λ₯Έ νμͺ½μ 1 λλ 255λ‘ λ°κΎΈλ μμ
μ΄μ§ν νΈλλ° μ€μ
void binaryzationTrackbar(int, void*)
{
out2 = out1.clone();
for (int y = 0; y < out2.size().height; y++)
{
for (int x = 0; x < out2.size().width; x++)
{
if (out2.at<uchar>(y, x) >= value)
out2.at<uchar>(y, x) = 255;
else
out2.at<uchar>(y, x) = 0;
}
}
imshow("edgeBinarization", out2);
}
Morphology, λͺ¨ν΄λ‘μ§
μμ λ΄ κ° λ°μ μμμ΄λ μ΄λμ΄ μμμ μΆμ, νλνλ κΈ°λ²
μ΄μ§ν κΈ°λ²μ μ¬μ©νμ λ κ²°κ³Ό μμμμ ν°μ μμμ΄λ κ²μμ μμμ΄ μνλ μλλ³΄λ€ λκ±°λ μ’κ² μ»μ΄μ‘μ κ²½μ°μ μ¬μ©νλ€.
λͺ¨ν΄λ‘μ§μ μ’
λ₯λ μλμ κ°λ€.
1 λμ μμμ΄ μ’μμ§λ μΉ¨μ μ°μ°
2 λμ μμμ΄ λμ΄μ§λ ν½μ°½ μ°μ°
3 λμ μμμμ μΈλΆ μμμ΄ μ κ±°λλ μ΄λ¦Ό μ°μ°
4 λΉνμ΄ μ±μμ§λ λ«ν μ°μ°
( λμ μμ = μ΄μ§ μμμ ν°μ, νλ°± μμμ λ°μ μμ )
Erosion, μΉ¨μ
μΉ¨μμ μ
λ ₯ν μ΄μ§ μμμ κ° ν½μ
μ λ§μ€ν¬λ₯Ό λμμ λ,λ§μ€ν¬κ° 255κ°μ κ°μ§λ λͺ¨λ ν½μ
μμΉμ λνμ¬ μ
λ ₯ μμλ 255 κ°μ κ°μ ΈμΌλ§ κ²°κ³Όκ°μ΄ 255κ° λλ μ°μ°μ΄λ€.
λ§μ½ λμ μμΉμμ ν ν½μ
μ΄λΌλ 0κ°μ κ°μ§λ©΄ κ²°κ³Όκ°μ 0μ΄ λκΈ° λλ¬Έμ μ 체μ μΌλ‘ 255κ°μ κ°μ§λ μμμ΄ μ€μ΄λλ κ²°κ³Όκ° λνλλ€.
μμ§ κ²μΆ -> μ΄μ§ν -> μΉ¨μμ°μ° 3x3 μ¬κ°ν ꡬ쑰μ νν°λ₯Ό μ¬μ©ν΄λ³΄μ.
void erode(Mat src, Mat& dst)
{
dst = src.clone();
for (int y = 1; y < src.size().height - 1; y++)
{
for (int x = 1; x < src.size().width - 1; x++)
{
if (src.at<uchar>(y, x) != 0)
{
// μ£Όλ³ ν½μ
μ€ νλλΌλ 0μΈ κ²½μ°, dst ν½μ
μ 0 μΌλ‘ νλ€.
if (src.at<uchar>(y - 1, x - 1) == 0 || src.at<uchar>(y - 1, x) == 0 || src.at<uchar>(y - 1, x + 1) == 0 ||
src.at<uchar>(y, x - 1) == 0 || src.at<uchar>(y, x + 1) == 0 || src.at<uchar>(y + 1, x - 1) == 0 || src.at<uchar>(y + 1, x) == 0 || src.at<uchar>(y+1, x+1) == 0)
dst.at<uchar>(y, x) = 0;
}
}
}
}
Dilation, ν½μ°½
ν½μ°½ μ°μ°μ μΉ¨μ μ°μ°κ³Ό λ°λλ‘ λ§μ€ν¬μ μ ν¨ μμμ μλ ν½μ
λ€μ λͺ¨λ λ°κ² λ§λλ μν μ νλ€
μμ§ κ²μΆ -> μ΄μ§ν -> ν½μ°½ μ°μ° 3x3 μ¬κ°ν ꡬ쑰μ νν°λ₯Ό μ¬μ©ν΄λ³΄μ.
void dilate(Mat src, Mat& dst)
{
dst = src.clone();
for (int y = 1; y < src.size().height - 1; y++)
{
for (int x = 1; x < src.size().width - 1; x++)
{
if (src.at<uchar>(y, x) != 255)
{
// μ£Όλ³ ν½μ
μ€ νλλΌλ 255λΌλ©΄, dst ν½μ
μ 255 λ‘ λ§λ λ€.
if (src.at<uchar>(y - 1, x - 1) == 255 || src.at<uchar>(y - 1, x) == 255 || src.at<uchar>(y - 1, x + 1) == 255 ||
src.at<uchar>(y, x - 1) == 255 || src.at<uchar>(y, x + 1) == 255 || src.at<uchar>(y + 1, x - 1) == 255 || src.at<uchar>(y + 1, x) == 255 || src.at<uchar>(y + 1, x + 1) == 255)
dst.at<uchar>(y, x) = 255;
}
}
}
}
μ΄μ§ μμμ μ΄λ¦Όκ³Ό λ«ν μ°μ°
μ΄λ¦Όκ³Ό λ«ν μ°μ°μ μΉ¨μκ³Ό ν½μ°½μ κ²°ν©ν ννλ‘ κ΅¬νν μ μλ€.
μ΄λ¦Ό μ°μ°μ λ°μ μμμ λνλ μμ λ
Έμ΄μ¦λ€μ μ κ±°νλλ° μ¬μ©νλ€.λ¨Όμ μΉ¨μ μ°μ°μ μννμ¬ λ°μ μμμ μ 체μ μΌλ‘ μΆμν λ€μ ν½μ°½ μ°μ°μ λ€μ΄μ΄ μννμ¬ μ 체μ μΈ λμ΄λ₯Ό μλλλ‘ λ³΅κ΅¬νλ€.
λ«ν μ°μ°μ λ°μ μμμ μκΈ΄ λ―ΈμΈν νμ λ©μ°λ μν μ νλ€.λ¨Όμ ν½μ°½ μ°μ°μ μννμ¬ λ°μ μμμ λνκ³ νμλ₯Ό λ©κΎΌλ€ κ·Έ νμ λ€μ μΉ¨μ μ°μ°μ μννλ€.
λͺ¨ν΄λ‘μ§ κΈ°λ²μ μμ©ν κ°μ²΄μ μΈκ³½μ κ²μΆ
μλ³Έ μμμμ μΉ¨μ μ°μ°μ μνν κ²°κ³Ό μμμ λΉΌκΈ° μ°μ°μ μνν΄λ³΄μ. λ€μ μμμμ μλ³Έ μμ = A, μΉ¨μ μ°μ°μ μνν κ²°κ³Ό μμ = B μ΄λ€.