Parsi Coders

نسخه‌ی کامل: همه چیز درباره پردازش تصاویر
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
صفحات: 1 2 3 4
[عکس: eye_blue.jpg]
مقدمه پردازش تصویر

چشم به عنوان یکی از حیاتی ترین حسگرهای انسان نقش بسزایی در زندگی ما دارد. امروزه با پیشرفت چشمگیری که در ساخت پردازنده ها صورت گرفته است، این امکان نیز برای ما فراهم شده تا در ساخت روبات ها و سیستم های کنترلی از دوربین به عنوان یک چشم مصنوعی استفاده کنیم.

پنج کاربرد عمده پردازش تصویر را می توان رباتیک ، سیستم های دفاعی ، مهندسی پزشکی ، کنترل







صنعتی و گرافیک کامپیوتری عنوان کرد. در سیستم های رباتیک معمولا از پردازش تصویر برای هدایت ربات و تشخیص اشیا استفاده می شود. در سیستم های دفاعی برای یافتن هدف و یا رهگیری یک هدف متحرک پردازش تصویر یکی از قابل اعتمادترین روش های موجود می باشد. در مورد کاربردهای گرافیکی نیز یکی از معروفترین نرم افزارهای مبتنی بر پردازش تصویر فتوشاپ می باشد که همگی با کاربردهای این نرم افزار آشنا هستیم. تشخیص نوع بیماری نیز رایج ترین کاربرد پردازش تصاویر پزشکی است. در نهایت ، امروزه خطوط تولید صنعتی برای کنترل کیفیت محصولات تولید شده و همچنین کنترل حرکات خط تولید از سیستم های مبتنی بر پردازش تصویر بهره جسته اند.
یک تصویر از لحظه ورود به سیستم پردازش تصویر تا تولید تصویر خروجی، به ترتیب مراحل زیر را طی می کند:
[عکس: dipSteps.jpg]
آنجه که در پردازش تصویر اهمیت بسیاری دارد، تسلط کامل بر مفاهیم تکنیک های پردازش تصویر است. به عنوان مثال خواهیم دید که چگونه تنها با چند تکنیک بسیار ساده پردازش تصویر می توانیم یک سیستم دوربین امنیتی ایجاد کنیم.
جمع دو تصویر
جمع دو تصویر بدین مفهموم است که در دوتصویر ، شدت روشنایی پیکسل های متناظر دو تصویر را از باهم جمع کنیم . تصاویر زیر نتیجه اعمال عملگر جمع را نشان می دهند:
تصویر اول
[عکس: EyeLGray.jpg]

تصویر دوم

[عکس: EyeRGray.jpg]

حاصل جمع دو تصویر:


شبه کد زیر نحوه پیاده سازی عملگر جمع را نشان می دهد :





کد:
Procedure Add (image1, image2 : Byte[][])
Begin
  result :Byte[][]
  sub:integer
  For i = 1 To Height Do
    For j = 1 To Width Do
      sub = image1[i, j] + image2[i, j]
      result[i, j] = sub > 255 ? 255 : sub
    End For
  End For
  Return result
End


یکی از رایج ترین کاربردهای جمع دو تصویر افزودن پشت زمینه به تصویر است. برای این منظور نیاز به دو تصویر پشت زمینه و تصویر شی داریم که تصویر شی باید در مقابل پرده ای با رنگ ثابت گرفته شود. از جمع کردن دو تصویر مذکور تصویری با پشت زمینه دلخواه به دست می آید.

پردازش تصویر در MATLAB :
برای تفریق دو تصویر هم اندازه از تابع imadd در MATLAB می توان استفاده کرد. به عنوان مثال مجموعه دستورات زیر دو تصویر را خوانده و حاصل جمع آن ها را نشان می دهد.





کد:
>> im = imread('rice.png');
>> imshow(im);
>> imBack = imread('background.png');
>> imshow(imBack);
>> res = imadd(im,imBack);
در سورس زیر که با ویژوال بیسیک 6 نوشته شده است منبع خوبی برای کسانی که فعلا میخوان رنگ تصاویر رو مثلا سیاه سفید با بصورت تاریک تبدیل کنند.
همچنین در این سورس از چند تابع api گرافیکی استفاده شده
از قبیل :
کد:
Declare Function SetStretchBltMode Lib "gdi32" (ByVal hdc As Long, ByVal nStretchMode As Long) As Long
Declare Function StretchDIBits Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dX As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal SrcWidth As Long, ByVal SrcHeight As Long, lpBits As Any, lpBitsInfo As BITMAPINFO, ByVal wUsage As Long, ByVal dwRop As Long) As Long
Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Declare Function GetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long

تصویر برنامه :
[عکس: h2kd8fiiiqwm82ttlpx.jpg]
دانلود:
[attachment=51]
پسوورد :
کد:
www.parsicoders.com
درود
با این سورس که گذاشتم با دلفی نوشته هست میتونید باهاش کد امنیتی یا همون Captcha رو دیکریپت کنید یا به همون عدد تبدیل کنید.
در سورس زیر چند نمونه کد امنیتی یا Captcha گذاشته شده است که میتونید به متن تدیلش کنید.
در واقع یه نوع پردازش تصاویر در سورس زیر میبینید و به کار نویسنده اسپمرها هم میاد.
سورسو پابلیک کردم به حجم 87 کیلو بایت

[attachment=61]
سلام من دارم روی واترمارکینگ صوت کار میکنم.یه سوال داشتم می خواستم ببینم طیف گسترده یک تکنیک جدا از cepstrumاست یا اینکه cepstrum جزیی از طیف گیترده است ؟ تو رو خدا اگه میدونین بهم بگید کلی گیج شدم.پیشاپیش ازتون تشکر میکنم.ممنون
(12-26-2011، 06:18 PM)mahtab1000 نوشته: [ -> ]سلام من دارم روی واترمارکینگ صوت کار میکنم.یه سوال داشتم می خواستم ببینم طیف گسترده یک تکنیک جدا از cepstrumاست یا اینکه cepstrum جزیی از طیف گیترده است ؟ تو رو خدا اگه میدونین بهم بگید کلی گیج شدم.پیشاپیش ازتون تشکر میکنم.ممنون

سلام
خوش امدید به فروم
نیازی به خواهش نبود دوست عزیز
در این مقاله توضیحاتی داده شده
اگر به کارتون نیومد بگید باز مقاله اپلود کنم
دانلود :
[attachment=80]
(12-26-2011، 06:18 PM)mahtab1000 نوشته: [ -> ]سلام من دارم روی واترمارکینگ صوت کار میکنم.یه سوال داشتم می خواستم ببینم طیف گسترده یک تکنیک جدا از cepstrumاست یا اینکه cepstrum جزیی از طیف گیترده است ؟ تو رو خدا اگه میدونین بهم بگید کلی گیج شدم.پیشاپیش ازتون تشکر میکنم.ممنون

salam sorry i dont no/:dodgy:
monijoon نوشته: سلام...میخاستم یک خواهش ازتون بکنم من دانشجوی ارشد نرم افزارم ...دارم رو یک مقاله کارمیکنم که شدیدا احتیاج به کمک دارم .تشخیص عیوب کاشی. با موجک 2d ..میشه قطعه کدی چیزی اگه دارید در اختیارم بزارید تا بتونم کارم انجام بدم

جواب دوست عزیز :

در آنالیز تابعی، تبدیل موجک گسسته تبدیل موجکی است که توابع موجک آن نمونه‌برداری شده اند. ساده‌ترین و اولین تابع موجک گسسته، موجک هار است که توسط آلفرد هار، ریاضیدان مجاری، معرفی شد.


[عکس: Jpeg2000_2-level_wavelet_transform-lichtenstein.png]


مثالی از تبدیل موجک گسسته که در JPEG2000 بکار می‌رود. با عبور دادن تصویر اولیه از فیلترهای بالاگذر سه تصویر حاصل می‌شود که هر کدام تغییرات محلی (جزئیات) تصویر را در جهتی نمایش می‌دهند. مثلاً مؤلفه قطری نمایشگر تغییرات تصویر در جهت قطری است. همچنین تصویر اصلی از فیلتر پایین‌گذر نیز عبور داده می‌شود و زیرنمونه‌برداری شده تا تصویر تقریبی حاصل شود. سپس این تصویر تقریبی مانند تصویر اصلی از فیلترهای بالاگذر و و پایین‌گذر عبور داده می‌شود تا چهار تصویر کوچکتر حاصل شوند. همانطور که دیده می‌شود، تصویر تقریبی حاصل (تصویر بالا سمت چپ) تقریبی خوب از تصویر اصلی است (و بدین سبب مؤلفه تقریبی نامیده می‌شود).

و دوست عزیز یه تیکه کد خواستن :

توضیحات بیشتر :


The picture shows a 2 level wavelet transform. For the low-pass and high-pass filters, I have used the same of the JPEG2000, lossy transform, so that this is the wavelet that is used in the JPEG2000 format. In general, it is quite hard to show a wavelet transform properly, because of the different ranges of the different parts. I have made the following choices.

First of all, I wanted to use a picture with both flat surfaces, sharp edges and details. The standard test image Lenna is commonly used for this purpose, but I didn't want to use it because it is not in the public domain. I took a look at the big featured picture gallery con Commons and I have chosen Image:Lichtenstein img processing test.png because it has lots of details in the bottom left, while the top right has almost no details because of the sky. Moreover, the edges of the castle are really sharp, so they can be clearly seen in the wavelet transform.

I have saved the original image in a file called lichtenstein.png, to make it simpler.

Then I have used the following Matlab script:



و همچنین سورس کد تبدیل موجک به زبان متلب

کد:
clear all

%input must be 512x512
img=imread('lichtenstein.png');

img=im2double(img);
img=rgb2gray(img);

% filters in JPEG2000
Lo_D=[0.0267 -0.0168 -0.0782 0.2668 0.6029 0.2668 -0.0782 -0.0168 0.0267];
Hi_D=[0.0912 -0.0575 -0.5912 1.1150 -0.5912 -0.0575 0.0912];

%calculate the 2-level Wavelet transform
[scaled, vertical, horizontal, diagonal]=dwt2(img,Lo_D,Hi_D);
[scaled2, vertical2, horizontal2, diagonal2]=dwt2(scaled,Lo_D,Hi_D);

%crop pictures (for displaying purpose)
scaled2=imcrop(scaled2,[4 4 127 127]);
horizontal2=imcrop(horizontal2,[4 4 127 127]);
vertical2=imcrop(vertical2,[4 4 127 127]);
diagonal2=imcrop(diagonal2,[4 4 127 127]);
horizontal=imcrop(horizontal,[4 4 255 255]);
vertical=imcrop(vertical,[4 4 255 255]);
diagonal=imcrop(diagonal,[4 4 255 255]);

%increase contrast (for displaying purpose)
vertical=imadjust(abs(vertical));
horizontal=imadjust(abs(horizontal));
diagonal=imadjust(abs(diagonal));
vertical2=imadjust(abs(vertical2));
horizontal2=imadjust(abs(horizontal2));
diagonal2=imadjust(abs(diagonal2));

%put them all together
transform=zeros(512,512);

transform(1:128,1:128)=scaled2;
transform(1:128,129:256)=horizontal2;
transform(129:256,1:128)=vertical2;
transform(129:256,129:256)=diagonal2;
transform(1:256,257:512)=horizontal;
transform(257:512,1:256)=vertical;
transform(257:512,257:512)=diagonal;

imwrite(transform,'Jpeg2000_2-level_wavelet_transform-lichtenstein.png');

توضیحاتی بیشتر در مورد تکه کد بالا :


If I had placed all the transforms one next to the other, I would have got a picture wider than 512x512, with some odd behaviour close to the edges. In order to avoid those problems, I have cropped the transforms so that I can easily put one next to the other to get a 512x512 picture. In general, it is not a good idea to discard information, but here I just wanted to create a simple and clear example. In order to show the derivatives, I have taken the absolute values (I want to show the magnitude of the derivative), then I have improved the contrast to make them look clearer.



منابع :
مشارکت‌کنندگان ویکی‌پدیا، «Discrete wavelet transform»، ویکی‌پدیای انگلیسی، دانشنامهٔ آزاد (بازیابی در ۶ ژانویه ۲۰۰۹).


و همچنین دوست عزیز برای تشخیص عیوب کاشی و موجک 2D میتونن به منبع فارسی زیر هم مراجعه کنند :
http://ismvip.ir/modules.php?name=Conten...ge&pid=248

موفق باشید
یک تصویر رنگی با فرمت TIFF دارم میخواستم
سه تا ماتریس R G B رو از هم جدا کنم و با مقادیرش کدنویسی کنم لطفا راهنمایی کنید ممنون میشم
(03-19-2012، 05:23 PM)elahe2 نوشته: [ -> ]یک تصویر رنگی با فرمت TIFF دارم میخواستم
سه تا ماتریس R G B رو از هم جدا کنم و با مقادیرش کدنویسی کنم لطفا راهنمایی کنید ممنون میشم

MATLAB can use an MxNx3 matrix to represent a RGB image, with each MxN submatrix representing RGB color intensities. The help on the image command can explain this further.

If you have three MxN matricies red, green, blue you can create the RGB matrix in several ways. I have used the following two: (this assumes you have already defined m, n, red, green and blue)
کد:
I = zeros(m, n, 3);
I(:, :, 1) = red;
I(:, :, 2) = green;
I(:, :, 3) = blue;
Or alternately:

CODE
کد:
I = reshape([red; green; blue], m, n, 3);
صفحات: 1 2 3 4