2014-12-03 14 views
12

Düşük kontrastlı görüntü segmentasyonu ile ilgili bir sorunum var. Görev, yüzey kusurlarını bulmaktır. Görünürler (kusurlar daima karanlık alanlardır), ancak görüntünün kontrastı çok düşüktür. İki örnek aşağıda. Düşük kontrast resim segmentasyonu

1 Ben kontrastı arttırmak denenmiş ve sonra tresholding var 2

:

Mat tmp1 = imread("C:\\framesRoi\\311.bmp",0); 
stretchContrast(tmp1); 
threshold(tmp1,tmp1,75,255,THRESH_BINARY); 

streç kontrast impl:

int minValue = 255, maxValue = 0; 
const int l = sourceImg.cols * sourceImg.rows * sourceImg.channels(); 
if(sourceImg.isContinuous()) 
{ 
    uchar* ptr = sourceImg.ptr<uchar>(0); 
    for(int i = 0; i < l; ++i) 
    { 
     if(ptr[i] < minValue) 
     { 
      minValue = ptr[i]; 
     } 
     if(ptr[i] > maxValue) 
     { 
      maxValue = ptr[i]; 
     } 
    } 
} 
cout<<"min: "<<minValue<<";"<<"max value: "<<maxValue<<endl; 

const int magicThreshold = 10; 
if(sourceImg.isContinuous()) 
{ 
    uchar* ptr = sourceImg.ptr<uchar>(0); 
    for(int i = 0; i < l; ++i) 
    { 
     ptr[i] = 255 * (ptr[i]-minValue)/(maxValue - minValue); 
    } 
} 

Ama bu yaklaşım başarısız oldu. Birçok sahte tespitler ve tüm kusurları tespit edilir değil: İşte 3

Test çerçeveli fermuar: insanlar yorumunuzda söylediği gibi https://dl.dropboxusercontent.com/u/47015140/testFrames.rar

+1

, bir kullanışlı eşiğini almak için gerekli bağlamı kaybederler. –

+0

@MarkRansom: Peki bunu nasıl yapmalıyım? – krzych

+2

Hataların her zaman karanlık olacağını biliyorsanız, parlak alanları tutarlı hale getirmek için kontrastı değiştirmeden parlaklığı ayarlayabilirsiniz. Bunu 90'lık bir yüzdelik kullanarak kullanmak yerine maks. Ile yapabilirsiniz, bunun yerine gürültüye karşı daha az savunmasız olur. –

cevap

8

Görüntüyü, gribi gibi bir küme yöntemini kullanarak gri düzeye kümelemeyi deneyin. Aşağıda hiçbir gri seviye dönüşümleri olmadan doğrudan doğruya görüntülerde kullandım (3 küme kullanarak bana daha iyi sonuçlar verdi). Yorumlarda ana hatlarıyla belirtilen yöntemleri kullanarak önceden işlenmiş bir görüntüyü kümeleyerek sonuçları iyileştirebilmelisiniz. kümelerin

enter image description here enter image description here

Şekil dolayı biraz kmeans rastgele değişebilir.

Kümelenmiş görüntünün bağlı bileşenlerini alır ve bu bölgelerin ortalama gri düzeyini hesaplarsanız, kusurların diğer bölgelere göre daha düşük bir ortalaması olmalıdır.

Matlab'da kümeleme parçası yaptım.

im = imread('r2SOV.png');%Uy1Fq r2SOV 
gr = im; 
size = size(gr); 

% perform closing using a 5x5 circular structuring element 
sel = strel('disk', 2, 4); 
mcl = imclose(gr, sel); 
% cluster gray levels using kmeans: using 3 clusters 
x = double(mcl(:)); 
idx = kmeans(x, 3); 
cl = reshape(idx, size); 

figure, imshow(label2rgb(cl)) 
+0

En iyi cevap çok uzak. Ödül süresi doluncaya kadar bekleyip en iyi cevabı kabul edeceğim. – krzych

4

, sen olumsuz yönde parlaklığını değiştirmek ve yukarı itebilir kontrast.

Ayrıca, sharpen filter da sizin durumunuz için çok kullanışlıdır. OpenCV'de this yapabilirsiniz.

4

Sana büyük bir pencere ile adaptiveThreshold fonksiyonunu denemek gerektiğini düşünüyorum. Burada

#include "opencv2/opencv.hpp" 
using namespace cv; 
int main(int argc,char** argv) 
{ 

    Mat im = imread("c:/data/img1.png",0); 
    cv::namedWindow("ctrl"); 
    int win=62; 
    int th=2100; 
    cv::createTrackbar("win", "ctrl", &win, 500); 
    cv::createTrackbar("th", "ctrl", &th, 10000); 
    while(true) 
    { 
     Mat thresh; 
     medianBlur(im,thresh,15);//helps smooth out smaller noises, which you could also remove by size instead of this way 
     adaptiveThreshold(thresh,thresh,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,win*2+1,( th/1000.)); 
     imshow("thresh",thresh); 
     if(waitKey(1)==27) 
      exit(0); 
    } 
} 

tüm sonuçlar (http://www.datafilehost.com/d/99e3d86c) Ayrıca otomatik eşik algoritmaları bir demet uygulayan ImageJ bir göz atmak isteyebilirsiniz. İhtiyacınız olan şey, yerel görüntü bilgilerini dikkate alan bir şey olduğunu düşünüyorum. Eğer görüntü içeriğine göre bir kontrast streç yaptığınızda

enter image description here enter image description here

İlgili konular