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
Ben kontrastı arttırmak denenmiş ve sonra tresholding var
: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
Test çerçeveli fermuar: insanlar yorumunuzda söylediği gibi https://dl.dropboxusercontent.com/u/47015140/testFrames.rar
, bir kullanışlı eşiğini almak için gerekli bağlamı kaybederler. –
@MarkRansom: Peki bunu nasıl yapmalıyım? – krzych
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. –