2013-01-14 24 views
6

मैं एक Epson Perfection V700 स्कैनर का उपयोग कर रहा है और निम्न विकल्पों का चयन जब उनके उपकरण का उपयोग कर स्कैनिंग:जुड़वां/इमू/ओपन सीवी के साथ अच्छी तीखेपन कैसे प्राप्त करें?

  • आईसीएम रंग सुधार (स्रोत: EPSON-मानक और लक्ष्य: sRGB)
  • unsharp मुखौटा (मध्यम)

कि इस छवि का उत्पादन:

Image from Epson Tool

अब मेरी समस्या यह है - मैं वास्तव में TWAIN .Net का उपयोग कर इस स्कैनर के साथ बातचीत करने की जरूरत है और जब मैं ऐसा करते हैं, छवि मैं वापस पाने के यह है:

TWAIN Scanned Image

एक तरफ: मैं ऊपर उल्लिखित दो विकल्प का चयन रद्द किया और स्कैन फिर से इप्सन के साथ और मुझे TWAIN के माध्यम से जो कुछ मिलता है, उसके लिए एक बहुत ही समान छवि मिली।

तो मुझे लगता है कि शायद ये पोस्ट प्रोसेसिंग चरण हैं जो मैं छवि पर खुद कर सकता हूं (शायद वे किसी भी तरह हार्डवेयर में किए गए हैं, मुझे नहीं पता)।

मैं EmguCV का उपयोग कर रहा हूं, इसलिए सबसे पहले मैंने एक एक्सटेंशन विधि बनाई जो आईसीएम लागू करता है (मैं इसके लिए कोई दस्तावेज ढूंढने के लिए संघर्ष कर रहा हूं, इसलिए यह एक अनुमान है और शायद मैं तुरंत गलत हूं लेकिन मुझे मिल गया यहाँ से जानकारी:

public static Image<Bgr, TDepth> ApplyIcm<TDepth>(
    this Image<Bgr, TDepth> source, 
    string sourceIcm, 
    string targetIcm) 
    where TDepth : new() 
{ 
    var target = source.CopyBlank(); 

    using (source) 
    { 
     using (var b = source.Bitmap) 
     { 
      using (var memory = new MemoryStream()) 
      { 
       b.Save(memory, ImageFormat.Bmp); 
       memory.Position = 0; 

       var bitmapImage = new BitmapImage(); 
       bitmapImage.BeginInit(); 
       bitmapImage.StreamSource = memory; 
       bitmapImage.CacheOption = BitmapCacheOption.OnLoad; 
       bitmapImage.EndInit(); 

       var ccb = new ColorConvertedBitmap(); 
       ccb.BeginInit(); 
       ccb.Source = bitmapImage; 

       ccb.SourceColorContext = 
        new ColorContext(new Uri(sourceIcm)); 

       ccb.DestinationColorContext = 
        new ColorContext(new Uri(targetIcm)); 

       ccb.EndInit(); 

       var encoder = new BmpBitmapEncoder(); 
       encoder.Frames.Add(BitmapFrame.Create(ccb)); 
       using (var ms = new MemoryStream()) 
       {        
        encoder.Save(ms); 
        target.Bitmap = new Bitmap(ms); 
       } 
      } 
     } 
    } 

    return target; 
} 

तो मुझे लगता है कि unsharpen बात को देखा और इस सवाल में आए: How to sharpen an image in OpenCV? जो कहते हैं:

आप एक का उपयोग The bitmap transform class और यह छवि के लिए एक अंतर) बनाने के लिए लगता है गाऊशियन smoothing फिल्टर ए nd मूल छवि

(मैं भी इस सवाल का पता लगाने के लिए क्या बराबर EmguCV कॉल Why might EmguCV Gaussian blur not return identical results as OpenCV Gaussian blur? है चेक) और इस अतिरिक्त विस्तार विधि के साथ आया था से समतल संस्करण घटाना:

public static Image<Bgr, TDepth> UnsharpMask<TDepth>(
    this Image<Bgr, TDepth> source, 
    Size kernelSize, 
    int kernelHoritonalStandardDeviation, 
    int kernelVerticalStandardDeviation, 
    double alpha, 
    double beta, 
    double gamma) 
    where TDepth : new() 
{ 

    Image<Bgr, TDepth> ret = source.CopyBlank(); 

    CvInvoke.cvSmooth(source, 
         ret, 
         SMOOTH_TYPE.CV_GAUSSIAN, 
         kernelSize.Width, 
         kernelSize.Height, 
         kernelHoritonalStandardDeviation, 
         kernelVerticalStandardDeviation); 

    CvInvoke.cvAddWeighted(source, alpha, ret, beta, gamma, ret); 

    return ret; 
} 

मैं अब यह इतना की तरह फोन:

string sourceIcm = @"C:\Windows\System32\spool\drivers\color\ewrgb18.icm"; 
string targetIcm = @"C:\Windows\System32\spool\drivers\color\ewsrgb.icm"; 

using(var im = new Image<Bgr, byte>("out.bmp")) 
{ 
    using (var icmmed = im.ApplyIcm(sourceIcm, targetIcm)) 
    { 
     using (var ret = icmmed.UnsharpMask(new Size(0, 0), 5, 5, 2.4, -1.5, 0)) 
     { 
      ret.Save("ret.bmp"); 
     } 
    } 
} 

और इस परिणाम है:

After my sharpening

बहुत अच्छा नहीं है! :-(

मैंने अंतहीन पैरामीटर के साथ झुका दिया है, लेकिन मैं सिर्फ यह नहीं कर सकता कि कैसे (या यहां तक ​​कि अगर) मैं ईपीएस टूल के समान परिणाम प्राप्त कर सकता हूं।

तो, मेरे सवाल यह है:

अगर यह OpenCV/EmguCV (या यहां तक ​​TWAIN का उपयोग कर एक परिणाम प्राप्त करने के लिए संभव है किसी को भी पता है - मुझे लगता है कि के लिए प्रलेखन के माध्यम से एक नज़र था और में से कुछ को एडजस्ट करने की कोशिश की क्षमता पैरामीटर लेकिन मैंने अभी छवि को और भी बदतर बना दिया है) जो ऊपर की मूल छवि की तीखेपन में समान है या क्या मुझे एक और तकनीक की कोशिश करनी चाहिए (क्या यह हो सकता है कि मुझे सही sharpening प्राप्त करने के लिए हार्डवेयर के बारे में कुछ विवरण जानना होगा)?

उत्तर

2

मुझे लगता है कि आपको अपनी परियोजना में डब्ल्यूआईए (विंडोज़ छवि अधिग्रहण) का उपयोग करने के बारे में पता होना चाहिए, आपको ओपनसीवी का उपयोग करके हार्डवेयर तक पहुंच प्राप्त करने की आवश्यकता नहीं हो सकती है। डब्ल्यूआईए का उपयोग वेबकैम और स्कैनर के साथ एकीकृत करने के लिए किया जाता है। या, आप TWAIN उपयोग कर सकते हैं आप के रूप में उल्लेख किया इन उदाहरणों पर एक नज़र वे अपनी परियोजना के लिए उपयोगी द्वारा कर सकता है:

using WIA

और

using TWAIN

शार्पनिंग के संबंध में, आप उपयोग कर सकते हैं सॉफ्टवेयर स्तर पर opencv कार्यक्षमता, आपकी समस्या को हल करने के लिए एक और विकल्प