MATLAB Language
इमेज प्रोसेसिंग
खोज…
मूल छवि I / O
>> img = imread('football.jpg');
MATLAB में एक मैट्रिक्स में छवि फ़ाइलों को पढ़ने के लिए imread
का उपयोग करें।
एक बार जब आप एक छवि को imread
, तो इसे मेमोरी में ND-array के रूप में संग्रहीत किया जाता है:
>> size(img)
ans =
256 320 3
'football.jpg'
जेपीजी की छवि में 256 पंक्तियाँ और 320 स्तंभ हैं और इसमें 3 रंग चैनल हैं: लाल, हरा और नीला।
अब आप इसे मिरर कर सकते हैं:
>> mirrored = img(:, end:-1:1, :); %// like mirroring any ND-array in Matlab
और अंत में, इसे एक छवि के रूप में वापस imwrite
का उपयोग imwrite
:
>> imwrite(mirrored, 'mirrored_football.jpg');
इंटरनेट से चित्र प्राप्त करें
जब तक आपके पास इंटरनेट कनेक्शन है, आप हाइपरलिंक से चित्र पढ़ सकते हैं
I=imread('https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png');
एक 2 डी एफएफटी का उपयोग करके छानना
जैसे 1 डी सिग्नल के लिए, फूरियर रूपांतरण लागू करके छवियों को फ़िल्टर करना संभव है, आवृत्ति डोमेन में एक फिल्टर के साथ गुणा करना और वापस अंतरिक्ष डोमेन में बदलना। यहाँ आप Matlab के साथ एक छवि के लिए उच्च या निम्न-पास फ़िल्टर कैसे लागू कर सकते हैं:
image
को मूल, अनफ़िल्टर्ड छवि होने दें, यहां इसकी 2D FFT की गणना कैसे की जाए:
ft = fftshift(fft2(image));
अब स्पेक्ट्रम के एक हिस्से को बाहर करने के लिए, एक को अपने पिक्सेल मानों को 0 पर सेट करने की आवश्यकता है। मूल छवि में निहित स्थानिक आवृत्ति को केंद्र से किनारों ( fftshift
का उपयोग करने के बाद) में मैप किया जाता है। कम आवृत्तियों को बाहर करने के लिए, हम केंद्रीय परिपत्र क्षेत्र को 0 पर सेट करेंगे।
यहां अंतर्निहित फ़ंक्शन का उपयोग करके त्रिज्या D
साथ डिस्क के आकार का बाइनरी मास्क उत्पन्न करने का तरीका बताया गया है:
[x y ~] = size(ft);
D = 20;
mask = fspecial('disk', D) == 0;
mask = imresize(padarray(mask, [floor((x/2)-D) floor((y/2)-D)], 1, 'both'), [x y]);
आवृत्ति डोमेन छवि को मास्किंग एफएफटी बिंदु-वार को ऊपर प्राप्त बाइनरी मास्क के साथ गुणा करके किया जा सकता है:
masked_ft = ft .* mask;
अब, व्युत्क्रम FFT की गणना करें:
filtered_image = ifft2(ifftshift(masked_ft), 'symmetric');
एक छवि में उच्च आवृत्तियाँ तेज धार हैं, इसलिए इस उच्च-पास फिल्टर का उपयोग छवियों को तेज करने के लिए किया जा सकता है।
छवि फ़िल्टरिंग
मान लीजिए कि आपके पास एक छवि rgbImg
, उदाहरण के लिए, imread
का उपयोग करके imread
।
>> rgbImg = imread('pears.png');
>> figure, imshow(rgbImg), title('Original Image')
2D फ़िल्टर बनाने के लिए fspecial
का उपयोग करें:
>> h = fspecial('disk', 7);
>> figure, imshow(h, []), title('Filter')
छवि पर फ़िल्टर लागू करने के लिए imfilter
का उपयोग करें:
>> filteredRgbImg = imfilter(rgbImg, h);
>> figure, imshow(filteredRgbImg), title('Filtered Image')
जुड़े हुए क्षेत्रों के मापने के गुण
एक द्विआधारी छवि के साथ शुरू, bwImg
, जिसमें कई जुड़े ऑब्जेक्ट हैं।
>> bwImg = imread('blobs.png');
>> figure, imshow(bwImg), title('Binary Image')
छवि में प्रत्येक वस्तु के गुणों (जैसे, क्षेत्र, केन्द्रक, आदि) को मापने के लिए, regionprops
उपयोग करें:
>> stats = regionprops(bwImg, 'Area', 'Centroid');
stats
एक संरचना सरणी है जिसमें छवि में प्रत्येक वस्तु के लिए एक संरचना होती है। किसी वस्तु के मापा गुण तक पहुंचना सरल है। उदाहरण के लिए, पहली वस्तु के क्षेत्र को प्रदर्शित करने के लिए, बस,
>> stats(1).Area
ans =
35
उन्हें मूल छवि पर ओवरले करके ऑब्जेक्ट सेंट्रोइड की कल्पना करें।
>> figure, imshow(bwImg), title('Binary Image With Centroids Overlaid')
>> hold on
>> for i = 1:size(stats)
scatter(stats(i).Centroid(1), stats(i).Centroid(2), 'filled');
end