<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های عباس خدائیان</title>
        <link>https://virgool.io/feed/@abbas.khodaeian</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 23:42:24</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1808668/avatar/6QC4ge.jpg?height=120&amp;width=120</url>
            <title>عباس خدائیان</title>
            <link>https://virgool.io/@abbas.khodaeian</link>
        </image>

                    <item>
                <title>چسباندن دو عکس به یکدیگر در متلب</title>
                <link>https://virgool.io/@abbas.khodaeian/%DA%86%D8%B3%D8%A8%D8%A7%D9%86%D8%AF%D9%86-%D8%AF%D9%88-%D8%B9%DA%A9%D8%B3-%D8%A8%D9%87-%DB%8C%DA%A9%D8%AF%DB%8C%DA%AF%D8%B1-%D8%AF%D8%B1-%D9%85%D8%AA%D9%84%D8%A8-klddwmifjyak</link>
                <description>امروز راجع به برش دو تصویر از وسط و چسباندن آنها به یکدیگر به گونه ای که نیمه چپ تصویر اول به نیمه راست تصویر دوم بچسبد در متلب میگویم.نمونه تصاویر ساخته شده به این صورت را در زیر مشاهده میکنید:چسباندن دو تصویر در متلببه این منظور توسط دستور imread تصویر اول و دوم را خوانده و هر یک را در متغیر جداگانه ای نگهدای میکنیم.سپس مقدار اندازه تصویر اول را بر 2 تقسیم و به سمت پایین گرد کرده و در متغیر n1 ذخیره میکنیم.n1 = floor(size(x1)/2);در اينجا دستور size اندازه تصوير را به صورت يك ماتريس m x n به ما ميدهد و وقتي آن را بر 2 تقسيم ميكنيم مقادير اين ماتريس نصف خواهد شد و چناچه در هنگام نصف شدن مقادير، عدد اعشاري حاصل شود، توسط دستور floor آن را به پايين رند ميكنيم.اندازه تصویر اول را در متغیر m2 ذخیره میکنیم. لازم به ذکر است که اندازه تصویر یک ماتریس m x n می باشد که m تعداد ردیف های آن و n تعداد ستون های آن می باشد.m1 = size(x1);همین عملیات را برای تصویر دوم هم انجام میدهیم.n2 = floor(size(x2)/2);
m2 = size(x2);قسمت چپ تصویر نهایی قرار است از بخش اول تصویر اول ساخته شود. به این صورت که چنانچه فرض کنیم تصویر را از وسط توسط دستورات بالا تا زدیم، قسمت چپ این تصویر را در متغیر Lpic نگداری میکنیم:Lpic = x1(:,1:n1(2),:);برای بخش راست تصویر نهایی هم از قسمت راستی تصویر دوم چنانچه از وسط آن را تا کنیم استفاده میکنیم و آن را در متغیر Rpic‌ نگهداری میکنیم.Rpic = x2(:,n2(2)+1:m2(2),:);در نهايت هر يك از تصاوير جديد را نمايش توسط دستور imshow در يك پنجره جديد نمايش ميدهيم.figure, imshow(Lpic);
figure, imshow(Rpic);براي چسباندن تصاوير چپ و راست ساخته شده به روش بالا از دستورات imshowpair به شكل زير استفاده ميكنيم.figure, imshowpair(Lpic,Rpic,&#039;montage&#039;)تصوير نهايي را در ابتداي نوشته ميتوانيد مجددا مشاهده كنيد.كد كامل به شرح زير است:close all;
clear all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x1 = imread(&#039;1.tif&#039;);
figure, imshow(x1);
x2 = imread(&#039;2.tif&#039;);
figure, imshow(x2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n1 = floor(size(x1)/2);
m1 = size(x1);
n2 = floor(size(x2)/2);
m2 = size(x2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Lpic = x1(:,1:n1(2),:);
Rpic = x2(:,n2(2)+1:m2(2),:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure, imshow(Lpic);
figure, imshow(Rpic);
figure, imshowpair(Lpic,Rpic,&#039;montage&#039;)</description>
                <category>عباس خدائیان</category>
                <author>عباس خدائیان</author>
                <pubDate>Sun, 13 Nov 2022 22:09:07 +0330</pubDate>
            </item>
                    <item>
                <title>مبحث تشخیص اشیاء با استفاده از الگورتیم YOLOv3</title>
                <link>https://virgool.io/@abbas.khodaeian/%D9%85%D8%A8%D8%AD%D8%AB-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%A7%D8%B4%DB%8C%D8%A7%D8%A1-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A7%D9%84%DA%AF%D9%88%D8%B1%D8%AA%DB%8C%D9%85-yolov3-mdja8gn2hptt</link>
                <description>موضوع تمرین این هفته، تشخیص اشیاء و بخصوص تشخیص توپ بوده است.به این منظور، از الگوریتم Yolo ورژن 3 و از دیتاست COCO (Common Objects in Context) استفاده شده است.در ادامه کد های مربوطه را در نرم افزار متلب با هم میبینیم.سورس برنامه در نرم افزار متلبدر ابتدا نام دیتاست مد نظر را در یک متغیر ذخیره میکنیم.name3 = &#039;tiny-yolov3-coco&#039;;برای تعریف کلاس مد نظرمان جهت تشخیص اشیاء از کد زیر استفاده میکنیم.classes = {&#039;sports ball&#039;};در نهایت با استفاده از تابع yolov3ObjectDetector متغیر detector را به صورت زیر ایجاد میکنیم.detector = yolov3ObjectDetector(name3, classes, anchorBoxes);بعد از فراخوانی الگورتیم YOLOv3 و لود کردن دیتاست COCO تصویر مد نظر را از ورودی میخوانیم. بعد از این مرحله، سایز تصویر خوانده شده از ورودی را نصف کرده و آن را از unit8 به single تبدیل میکنیم و عملیات preprocess را روی آن انجام میدهیم.img = im2single(imresize(img,0.5));
img = preprocess(detector,img);در آخر با استفاده از تابع detect به صورت زیر، شیء مد نظر را تشخیص داده که در ادامه پارامترهای آن را توضیح میدهیم.[bboxes,scores,labels] = detect(detector,img,Threshold=0.82);متغیر detector بر اساس بارگذاری دیتاست COCO و الگورتیم YOLOv3 به عنوان پارامتر اول تابع detect یا تشخیص می باشد. برای پارامتر دوم این تابع از تصویر دستکاری شده استفاده کردیم. در آخرین مرحله آستانه و دقت تشخیص را مشخص میکنیم.این تابع در خروجی خود 3 پارامتر باز میگرداند که به ترتیب BoundingBox یا ابعاد مستطیل هایی که در اطراف شیء یا اشیاء تشخیص داده شده مشخص میکند، Scores یا امتیاز و دقت تشخیص شیء و Labels یا عنوان هر یک اشیاء تشخیص داده شده در تصویر ورودی.برای امکان نمایش اطلاعات بالا به صورت یک جدول در بخش Command ها از دستور زیر استفاده میشود:results = table(bboxes,labels,scores);
disp(results);جهت نمایش داده های جدید و تفکیک اشیاء این اطلاعات را روی تصویر جدید نمایش میدهیم.detectedImg = insertObjectAnnotation(img,&#039;Rectangle&#039;,bboxes,labels);
figure, imshow(detectedImg);تصویر اولیه و تصویر نهایی به ترتیب به شرح زیر خواهد بود.تصویر ورودی اولیهتصویر دوم بعد از تشخیص شیءکلیه کد ها در نرم افزار متلب پیاده سازی شده اند و به شرح ذیل می باشند:clc;
clear all;
close all;

name3 = &#039;tiny-yolov3-coco&#039;;
classes = {&#039;sports ball&#039;};
anchorBoxes = {[122,177;223,84;80,94]; [111,38;33,47;37,18]};
detector = yolov3ObjectDetector(name3, classes, anchorBoxes);

img = imread(&#039;baseball01.jpg&#039;);
img = im2single(imresize(img,0.5));
img = preprocess(detector,img);
[bboxes,scores,labels] = detect(detector,img,Threshold=0.82);
results = table(bboxes,labels,scores);
disp(results);
detectedImg = insertObjectAnnotation(img,&#039;Rectangle&#039;,bboxes,labels);
figure, imshow(detectedImg);</description>
                <category>عباس خدائیان</category>
                <author>عباس خدائیان</author>
                <pubDate>Sat, 12 Nov 2022 23:18:14 +0330</pubDate>
            </item>
                    <item>
                <title>تكنيك Halftoning ديجيتال</title>
                <link>https://virgool.io/@abbas.khodaeian/%D8%AA%D9%83%D9%86%D9%8A%D9%83-halftoning-%D8%AF%D9%8A%D8%AC%D9%8A%D8%AA%D8%A7%D9%84-n5hiohi5ozub</link>
                <description>نیمه تونینگ یا نیمه تونینگ آنالوگ فرآیندی است که تصاویر سیاه و سفید را با تغییر اندازه نقاط سیاه که در یک الگوی منظم چیده شده اند شبیه سازی میکند. این تکنیک در چاپگرها و همچنین در صنعت نشر استفاده می شود. اگر عکسی را در روزنامه بررسی کنید، متوجه خواهید شد که تصویر از نقاط سیاه تشکیل شده است، حتی اگر به نظر از رنگ خاکستری تشکیل شده باشد. علت آن نیز ادغام فضایی انجام شده توسط چشمان ما می باشد. چشمان ما جزئیات دقیق را با هم ترکیب کرده و شدت کلی را ثبت می کند. نیمه‌تونینگ دیجیتالی شبیه به نیمه‌تونینگ آنالوگ است که در آن تصویر به شبکه‌ ای از سلول ‌های نیمه ‌تونی تجزیه می‌شود. عناصر (یا نقاطی که نیمه‌تونینگ برای شبیه ‌سازی سایه ‌های خاکستری استفاده می‌کند) یک تصویر با پر کردن سلول‌های نیمه ‌تونی مناسب شبیه‌ سازی می ‌شوند. هر چه تعداد نقاط سیاه در یک سلول نیمه تونی بیشتر باشد، سلول تیره تر به نظر می رسد. به عنوان مثال، در شکل 4، یک نقطه کوچک واقع در مرکز با پر کردن سلول نیمه‌تون مرکزی، شبیه‌سازی شده است. به همین ترتیب، یک نقطه با اندازه متوسط ​​واقع در گوشه بالا سمت چپ با پر کردن چهار سلول در گوشه بالا سمت چپ شبیه‌سازی می‌شود. نقطه بزرگی که بیشتر ناحیه را در تصویر سوم می پوشاند با پر کردن تمام سلول های نیمه تونی شبیه سازی شده است.همراه با متن و گرافیک، تصاویر به سرعت در حال تبدیل شدن به یک نوع داده عمومی برای سیستم های کامپیوتری همه منظوره هستند. این موضوع مشکلات جدیدی را برای طراح سیستم ایجاد می کند، که باید بتواند داده های تصویر دیجیتال را برای طیف گسترده ای از دستگاه ها پیش پردازش کند. نمایشگرهای اداری، چاپگرهای لیزری و چاپگرهای سوزنی خانگی با رزولوشن ها و نسبت تصاویر مختلف باید بتواند تصویر داده شده را به صورت مشابه ارائه دهد.  به این منظور یک راه حل آن است که به ازای هر دستگاه یک پیش پردازنده اختصاصی وجود داشته باشد که داده های تصویر دیجیتال را به شکلی متناسب با ویژگی های خاص آن دستگاه تبدیل کند.به هر فرآیند الگوریتمی که بخشی از این پیش پردازش که از تصاویر باینری، تصاویر با آرایش پیوسته (پراکندگی فضایی) را ارائه میدهد، halftoning دیجیتال میگویند.  در واقع تکنیک halftoning نمایش تصاویر پیوسته همچون ویدئو، روی کاغذ یا رسانه های مشابه که فقط امکان نمایش دو بعد را دارند می باشد. در halftoning دیجیتال، تبدیل مقیاس خاکستری به دو سطحی به صورت دیجیتالی، با استفاده از نرم افزار یا سخت افزار انجام می شود.در این خصوص در سه دهه ی اخیر الگوریتم های مختلفی توسعه داده شدند که نمونه ‌هایی از این الگوریتم ‌ها عبارتند از الگوسازی[1]، انحراف مرتب[2]، انتشار خطا[3]، ماسک‌های نویز آبی[4]، نویز سبز[5]، جستجوی باینری مستقیم[6] و انتشار نقطه[7].روش انتشار نقطه‌ ای برای نیمه‌تونینگ دیجیتال، بر خلاف روش انتشار خطا، که یک روش محبوب نیمه‌تونینگ است، مزیت موازی ‌سازی در سطح پیکسل را دارد که یک روش محبوب نیمه تونینگ است. با این حال، کیفیت تصویر ارائه شده توسط الگوریتم انتشار خطا همچنان برتر از بسیاری از روش های شناخته شده دیگر در نظر گرفته می شود.الگوریتم الگوسازی (Patterning):الگوسازی ساده‌ ترین روش برای تولید تصاویر نیمه‌تونینگ دیجیتال است و تصویری تولید می کند که وضوح فضایی بالاتری نسبت به تصویر اولیه دارد. در این روش تعداد سلول ‌های نیمه‌تون تصویر خروجی با تعداد پیکسل ‌های تصویر اولیه برابر است. هر سلول نیمه تونی از یک شبکه 4×4 تشکیل می شود. به ازای هر پیکسل ورودی تعداد متفاوتی از مربع های پر شده در سلول نیمه تونی نمایش داده می شود. از آنجایی که یک شبکه 4×4 تنها می تواند 17 سطح شدت مختلف را نشان دهد، تصویر اولیه باید کوانتیزه و تدریجی شود.برنامه یک تصویر ورودی را می خواند، مقادیر پیکسل را کمّی کرده و هر پیکسل را به الگوی مربوط به خود نگاشت می کند. تصویر به دست آمده 16 برابر بزرگتر از تصویر اصلی است.نکته: این روش به تعداد زیادی محاسبات نیاز دارد و به همین جهت تصاویر با اندازه کمتر از 100 پیکسل در 100 پیشنهاد میشود.الگوریتم انحراف مرتب یا پریشان (Dithering):بر خلاف روش الگوبرداری، روش دیترینگ یک تصویر خروجی شامل تعداد نقاط مشابه با تعداد پیکسل های تصویر اولیه ایجاد می کند. دیترینگ را می توان به عنوان یک ابزار آستانه گذاری تصویر اولیه توسط یک ماتریس به هم ریخته در نظر گرفت. ماتریس به طور مکرر روی تصویر منبع گذاشته می شود. هر جا که مقدار پیکسل تصویر بیشتر از مقدار ماتریس باشد، یک نقطه روی تصویر خروجی پر می شود.اول از یک ماتریس dither پیش فرض برای آستانه گذاری تصویر ورودی استفاده می شود. ماتریس دیتر پیش فرض به شرح زیر است:پیاده سازی الگورتیم دیترینگ در متلب به شرح زیر است:ditheringIMG = imread(&#039;sample.gif&#039;, 1);
ditheringIMG_bw = dither(ditheringIMG);
imshow(ditheringIMG);
figure,imshow(ditheringIMG_bw);همچنین خروجی به شرح ذیل نمایش داده میشود:[1] Patterning[2] Dithering[3] Error Diffusion[4] Blue noise masks[5] Green noise halftoning[6] Direct binary search (DBS)[7] Dot diffusion</description>
                <category>عباس خدائیان</category>
                <author>عباس خدائیان</author>
                <pubDate>Tue, 25 Oct 2022 21:39:28 +0330</pubDate>
            </item>
                    <item>
                <title>اسكن QR Code توسط زبان پايتون به صورت آنلاین</title>
                <link>https://virgool.io/@abbas.khodaeian/%D8%A7%D8%B3%D9%83%D9%86-qr-code-%D8%AA%D9%88%D8%B3%D8%B7-%D8%B2%D8%A8%D8%A7%D9%86-%D9%BE%D8%A7%D9%8A%D8%AA%D9%88%D9%86-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86-z9jkq7sdzdbn</link>
                <description>تصویر QR Code با محتوای لینک دانشگاه ایوان کیمنظور از اسکن به صورت آنلاین، یعنی بدون استفاده از تصویر ثابت و با استفاده از Webcam یا دوربین لپ تاپ و گوشی امکان خواندن و استخراج QR Code فراهم گردد.جهت اسكن QR Code در مرحله اول دسترسي از زبان پايتون به دوربین لپ تاب انجام میشود. به این منظور کتابخانه OpenCV باید توسط Command Promptپایتون نصب شوند.pip install OpenCVدر مرحله بعد هر دو كتابخانه را جهت استفاده در برنامه import ميكنيم. از cv2جهت دسترسي به دوربين و خواندن كد QR استفاده ميشود.import cv2گرفتن تصاوير دوربين وب كم توسط كلاس VideoCaptureدر cv2 انجام ميشود. همچنين رمز گشايي كد QRنيز توسط كلاس QRCodeDetector انجام ميگردد.vCapture = cv2.VideoCapture(0)
qrDetector = cv2.QRCodeDetector()جهت خواندن مداوم وب کم از یک حلقه استفاده میشود.while True:
    ret, img = vCapture.read()جهت رمز گشایی کد QRاز تابع detectAndDecode استفاده میشود.    data, bbox, qrcode = qrDetector.detectAndDecode(img)در مرحله بعدی تصاویر دریافتی از وب کم به صورت یک ویدئو در یک پنجره جدید به کاربر نمایش داده خواهد شد.    cv2.imshow(&amp;quotQR Code Scanner&amp;quot, img)جهت خروج کاربر از حلقه بدون خواندن کد QR کلید q در صفحه کلید در نظر گرفته شده است.    if cv2.waitKey(1) == ord(&amp;quotq&amp;quot):
        breakدر نهايت مقدار رمز گشايي شده ي كد QR نمايش داده ميشود.در اين مثال : http://www.eyc.ac.irکد کامل به شرح ذیل است:&amp;quot&amp;quot&amp;quot
Created on Sat Oct 15 11:02:38 2022
@author: Khodaeian
&amp;quot&amp;quot&amp;quot
import cv2
# initialize the webcam for capturing QR Code
vCapture = cv2.VideoCapture(0)
# initialize the cv2 QRCode detector
qrDetector = cv2.QRCodeDetector()
a = &#039;&#039;
while True:
    ret, img = vCapture.read()
    # detect and decode
    data, bbox, qrcode = qrDetector.detectAndDecode(img)
    # check if there is a QRCode in the image
    if data:
        a = data
        break
    # show the video capturing in new window
    cv2.imshow(&amp;quotQR Code Scanner&amp;quot, img)
    # press the q it will stop the video streaming
    if cv2.waitKey(1) == ord(&amp;quotq&amp;quot):
        break
print(str(a))
vCapture.release()
cv2.destroyAllWindows()Reference:[1] https://morioh.com/p/29f7e4c5f900[2] https://docs.opencv.org/4.x/de/dc3/classcv_1_1QRCodeDetector.html[3] https://www.dynamsoft.com/codepool/opencv-python-webcam-barcode-reader.html[4] https://www.geeksforgeeks.org/webcam-qr-code-scanner-using-opencv/</description>
                <category>عباس خدائیان</category>
                <author>عباس خدائیان</author>
                <pubDate>Tue, 18 Oct 2022 23:09:38 +0330</pubDate>
            </item>
                    <item>
                <title>خواندن آفلاین QR Code در متلب</title>
                <link>https://virgool.io/@abbas.khodaeian/%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D8%A2%D9%81%D9%84%D8%A7%DB%8C%D9%86-qr-code-%D8%AF%D8%B1-%D9%85%D8%AA%D9%84%D8%A8-hfg9ehaewdkz</link>
                <description>منظور از خواندن آفلاین این است که بدون استفاده از وب کم و تصویر لایو دوربین یا ویدیو استریم و فقط با استفاده از تصویر یک QR Code، چطور محتوای آن را استخراج نمائیم.به این منظور باید در ابتدا تصویر مد نظر از ورودی در متلب خوانده شود. لذا دستور زیر را اجرا میکنیم:I = imread(&amp;quotQRCode_eyc.ac.ir.jpg&amp;quot);در مرحله بعد بررسی تصویر ورودی جهت یافتن QR Code انجام میشود. خروجي دستور زير شامل پارامترهاي محتوای QRCodeرمز گشایی شده، قالب آن که شامل يكي از موارد جدول زیر است و مختصات قرارگیری تصویر QRCodeدر تصویر اصلی مي باشد.[msg,detectedFormat,loc] = readBarcode(I,&amp;quotall&amp;quot);قالب های بارکدهای 1 بعدی و 2 بعدی به صورت قرارداد بین المللیدر صورت اجرای این دستور متغییر های msg، detectedFormatو locشامل مقادیر بازیابی شده از تصویر بارکد خواهد بود.در این مثال، هر یک از این متغییر ها شامل مقادیر زیر هستند که در بخش Workspace قابل مشاهده است.Workspaceاز طرفی جهت نمایش راحت تر این متغییر ها در بخش Command Window میتوانید از دستورات زیر استفاده کنید:disp(&amp;quotBarcode format: &amp;quot + detectedFormat);
disp(&amp;quotDecoded barcode message: : &amp;quot + msg);در این صورت به شرح ذیل در بخش Command Window نمایش داده میشود:Command Windowدر انتها جهت اضافه کردن این مقادیر به تصویر و نمایش همه آنها با هم در یک تصویر به شرح ذیل عمل میکنیم:xyText = loc(2,:);
xyText = xyText + 10;با این دستور، با توجه به اینکه متغیر locدارای 4 نقطه مختصات جهت تشخیص QRCode است، طبق تصویر Workspace مقدار متغیر loc به شرح تصوير زير است، لذا با دستور بالا فقط مختصات دوم بدون محدودیت {یعنی نقطه ابتدایی و انتهایی مختصات} در متغیر xyText مقداردهی میگردد و جهت جلوگيري از تداخل آن با نقطه تصوير اصلي، مقدار 10 واحد به مختصات آن نقطه اضافه ميگردد.مقادیر نقطه های  شناسایی شده در QRCodeسپس توسط دستور زیر مقدار msgرا در نقطه مشخص xyText روی تصویر I درج میکنیم.دقت شود در این حالت سایز متن روی 10 پیکسل تنظیم شده است و یک مستطیل پر دور متن ایجاد شده است.Imsg = insertText(I,xyText,msg,&amp;quotBoxOpacity&amp;quot,1,&amp;quotFontSize&amp;quot,10);تا اینجا خروجی کار به شرح تصویر زیر خواهد بود:دستکاری تصویر اصلی و اضافه کردن مقدار استخراج شده از QRCode به آناکنون جهت ایجاد دایره های قرمز تو پر روی نقاط شناسایی QRCode روی تصویر جدید Imsg از دستور زیر استفاده میشود.Imsg = insertShape(Imsg, &amp;quotFilledCircle&amp;quot,[loc, repmat(5, length(loc), 1)],&amp;quotColor&amp;quot,&amp;quotred&amp;quot,&amp;quotOpacity&amp;quot,1);در نهایت با استفاده از دستور زیر تصویر کامل نمایش داده میشود:imshow(Imsg);خروجی نهایی کار به شرح ذیل خواهد بود:اسکریپت این مقاله به شرح ذیل است:close all;
clear all;
clc;

I = imread(&amp;quotQRCode_eyc.ac.ir.jpg&amp;quot);
[msg,detectedFormat,loc] = readBarcode(I,&amp;quotall&amp;quot);

disp(&amp;quotQRCode format: &amp;quot + detectedFormat);
disp(&amp;quotDecoded QRCode message: : &amp;quot + msg);

xyText = loc(2,:);
xyText = xyText + 10;
Imsg = insertText(I,xyText,msg,&amp;quotBoxOpacity&amp;quot,1,&amp;quotFontSize&amp;quot,10);
Imsg = insertShape(Imsg, &amp;quotFilledCircle&amp;quot,[loc, repmat(5, length(loc), 1)],&amp;quotColor&amp;quot,&amp;quotred&amp;quot,&amp;quotOpacity&amp;quot,1);
imshow(Imsg);Reference:[1] https://www.mathworks.com/help/vision/ref/readbarcode.html</description>
                <category>عباس خدائیان</category>
                <author>عباس خدائیان</author>
                <pubDate>Tue, 18 Oct 2022 22:53:16 +0330</pubDate>
            </item>
                    <item>
                <title>خواندن آفلاین بارکد در متلب</title>
                <link>https://virgool.io/@abbas.khodaeian/%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D8%A2%D9%81%D9%84%D8%A7%DB%8C%D9%86-%D8%A8%D8%A7%D8%B1%DA%A9%D8%AF-%D8%AF%D8%B1-%D9%85%D8%AA%D9%84%D8%A8-fhefi2a898g4</link>
                <description>منظور از خواندن آفلاین این است که بدون استفاده از وب کم و تصویر لایو دوربین یا ویدیو استریم و فقط با استفاده از تصویر یک بارکد چطور محتوای بارکد را استخراج نمائیم.بارکد دو بعدیبه این منظور باید در ابتدا تصویر بارکد مورد نظر از ورودی در متلب خوانده شود. لذا دستور زیر را اجرا میکنیم:I = imread(&#039;BarCode.jpg&#039;);در مرحله بعد بررسی تصویر ورودی جهت یافتن بارکد یک بعدی انجام میشود که محتوای بارکد رمز گشایی شده، قالب بارکد موجود در تصویر که شامل جدول زیر است و مختصات قرارگیری تصویر بارکد در تصویر اصلی بازیابی توسط دستور زیر بازیابی می شود.[msg,detectedFormat,loc] = readBarcode(I,&#039;1D&#039;);قالب های جهانی شناخته شده برای بارکدهای 1 بعدی و 2 بعدیدر صورت اجرای این دستور متغییر های msg، detectedFormat و loc شامل مقادیر بازیابی شده از تصویر بارکد خواهد بود.در این مثال، هر یک از این متغییر ها شامل مقادیر زیر هستند که در بخش Workspace قابل مشاهده است. تصویر Workspace در نرم افزار متلباز طرفی جهت نمایش راحت تر این متغییر ها در بخش Command Window میتوانید از دستورات زیر استفاده کنید:disp(&amp;quotBarcode format: &amp;quot + detectedFormat);
disp(&amp;quotDecoded barcode message: : &amp;quot + msg);در این صورت به شرح ذیل در بخش Command Window نمایش داده میشود:تصویر Command Window در نرم افزار متلبدر انتها جهت زیباتر اضافه کردن این مقادیر به تصویر و نمایش همه آنها با هم در یک تصویر به شرح ذیل عمل میکنیم:xyBegin = loc(1,:);با این دستور، با توجه به اینکه متغیر loc دارای دو نقطه مختصات طبق تصویر Workspace به شرح [29,104;216,104] است، لذا فقط مختصات اول بدون محدودیت {یعنی نقطه ابتدایی و انتهایی مختصات} در متغیر xyBegin مقداردهی میگردد.سپس توسط دستور زیر مقدار msg را در نقطه مشخص xyBegin روی تصویر I درج میکنیم.دقت شود در این حالت سایز متن روی  15 پیکسل تنظیم شده است و یک مستطیل پر دور متن ایجاد شده است.Imsg = insertText(I,xyBegin,msg,&#039;BoxOpacity&#039;,1,&#039;FontSize&#039;,15);تا اینجا خروجی کار به شرح تصویر زیر خواهد بود:تصویر دستکاری شده بارکدجهت بازیابی سایز تصویر از دستور زیر استفاده میشود:imSize = size(Imsg);جهت ایجاد یک خط با پهنای 5 پیکسل روی تصویر جدید Imsg از دستور زیر استفاده میشود.Imsg = insertShape(Imsg,&#039;Line&#039;,[1 xyBegin(2) imSize(2) xyBegin(2)],&#039;LineWidth&#039;,5);در نهایت با استفاده از دستور زیر تصویر کامل نمایش داده میشود:imshow(Imsg);خروجی نهایی کار به شرح ذیل خواهد بود:تصویر نهایی بارکداسکریپت این مقاله به شرح ذیل است:close all;
clear all;
clc;

I = imread(&#039;BarCode.jpg&#039;);
[msg,detectedFormat,loc] = readBarcode(I,&#039;1D&#039;);

disp(&amp;quotBarcode format: &amp;quot + detectedFormat);
disp(&amp;quotDecoded barcode message: : &amp;quot + msg);

xyBegin = loc(1,:);
Imsg = insertText(I,xyBegin,msg,&#039;BoxOpacity&#039;,1,&#039;FontSize&#039;,15);
imSize = size(Imsg);
Imsg = insertShape(Imsg,&#039;Line&#039;,[1 xyBegin(2) imSize(2) xyBegin(2)],&#039;LineWidth&#039;,5);
imshow(Imsg);Reference:[1] https://www.mathworks.com/help/vision/ref/readbarcode.html</description>
                <category>عباس خدائیان</category>
                <author>عباس خدائیان</author>
                <pubDate>Tue, 18 Oct 2022 17:06:14 +0330</pubDate>
            </item>
                    <item>
                <title>عملیات سرچ تصاویر گوگل به چه صورت انجام میشود؟</title>
                <link>https://virgool.io/@abbas.khodaeian/howthegoogleimagesearchengineworks-wosorgmna8i2</link>
                <description>طبق مطالعاتی که در این زمینه انجام دادم به این نتیجه رسیدم که جستجوی تصاویر در گوگل از طریق تصویر، جزء راز های گوگل هست و هر چه در اینترنت یافتم جز حدس و گمان نبود. بنابراین تصمیم گرفتم با توجه به مطالعات و جستجوهایی که انجام دادم این مطلب را پیاده سازی کنم.به نظر میرسد که گوگل از ترکیب چندین تکنیک مختلف برای جستجوی تصاویر استفاده می‍‍‍کند.یکی از تکنیک‍هایی که به نظر میرسد گوگل از آن برای یافتن تصاویر مشابه استفاده می‍کند، تکنیک جستجوی عکس معکوس (Reverse image search) می‍باشد که یک تکنیک جستجوی تصویر مبتنی بر محتواست (content-based image retrieval &#40;CBIR&#41;) و شامل یک تصویر نمونه برای سیستم CBIRاست که سپس جستجوی خود را بر اساس آن انجام می‍دهد. جستجوی عکس معکوس به کاربران این امکان را می‌دهد که محتوایی را پیدا کنند که مربوط به یک تصویر نمونه خاص است یا محبوبیت یک تصویر را بررسی کنند و همچنین نسخه‌های دستکاری شده و آثار مشتق شده را کشف کنند.الگوریتم های متداول جستجوی عکس معکوس عبارتند از:تبدیل ویژگی تغییر ناپذیر مقیاس (Scale-invariant feature transform(SIFT)): یک الگوریتم بینایی ماشین برای تشخیص، استخراج، توصیف و تطبیق ویژگی های محلی در      تصاویر است و کاربردهای متنوعی در تشخیص اشیا، ناوبری رباتیک، ترکیب تصویر،      مدل سازی سه بعدی، تشخیص حرکت، ردیابی ویدئو و ... دارد.مناطق بیرونی با حداکثر پایداری (Maximally stable extremal regions(MSER))درخت واژگان (Vocabulary tree یا Bag-of-words model)مراحل کلی در هنگامیکه جستجو بر اساس تصویر انجام می‍شود تا از یک تصویر ارسالی به نتایج جستجوی برگشتی برسد به شرح زیر است:1. تجزیه و تحلیل تصویر: تصویر ارسال شده برای یافتن شناسه‍هایی مانند رنگ‍ها، نقاط، خطوط و بافت‍ها تجزیه و تحلیل می‍شود. در تجزیه و تحلیل تصویر به نظر میرسد از تکنیک تطبیق الگو (Pattern Matching) استفاده می‍شود. از این طریق لبه‍های داخل تصویر مشخص شده و ویژگی‍های اصلی به صورت بردار در دیتابیس ذخیره می‍شوند. سپس از تکنیک‍های هوش مصنوعی و یادگیری عمیق جهت درک محتوا استفاده می‍شود. هوش مصنوعی یک تصویر را بررسی می‍کند و گروهی از ویژگی‍ها را با احتمالات رخ داد هر کدام، گزارش می‍دهد که همه آنها به عنوان متا تگ برای تصویر استفاده می‍شود. اصطلاح «محتوا» در این زمینه ممکن است به رنگ‌ها، شکل‌ها، بافت‌ها یا هر اطلاعات دیگری که می‌تواند از خود تصویر مشتق شود اشاره کند (CBIR).2. ایجاد پرس و جو: این ویژگی‍های متمایز تصویر برای ایجاد یک عبارت جستجو استفاده می‍شود.3. تطبیق تصویر: تطبیق داده های متا دیتا و بررسی کردن محتوای داده‌ها و جمع‌بندی آنها انجام می‍شود و تصاویر مطابقت داده شده با پرس و جو مشخص می‍شوند.4. بازگشت نتایج: الگوریتم‌های جستجو و تطبیق گوگل، تصاویر مشابه را به عنوان نتایج به کاربر بر می‌گردانند.هسته اصلی الگوریتم موتور جستجوی تصویر گوگل بر تطبیق عبارت‍های جستجو با متن مرتبط با تصاویر متکی است. نمونه ای از متن مرتبط با تصاویر شامل موارد زیر است:نام فایلابرداده های تصویری مانند ابرداده EXIFمتن از صفحه وب که تصویر از آن پیوند داده شده استمتن از صفحه وب که تصویر به آن پیوند داردلنگر متن هایپرلینک ها به تصویرعنوان تصویرهنگامی که رتبه‌بندی اولیه نتایج جستجوی تصویر ایجاد شد، تصاویر برتر دوباره پردازش می‌شوند تا در نتایج جستجو، تصویر مرتبط‌تری ارائه شود. در این پردازش مجدد، به تصاویری که شبیه‌ترین تصاویر در زیر مجموعه هستند، ارتباط بیشتری داده می‌شود و تصاویری که خیلی متفاوت هستند، مجدداً رتبه‌بندی یا حتی حذف می‌شوند. برای اینکه نتایج مرتبط تری ارائه شود، عملیات‌های زیر نیز ممکن است انجام شود:حذف یا وزن بیشتر به تصاویر دارای چهره، بر اساس احتمال این که پرس و جو برای یافتن تصویر یک شخص باشدحذف یا وزن دادن بیشتر به تصاویر با نشانه ها یا اشیاء خاصوزن بیشتر به تصاویر با کیفیت بالاترنکات برجسته در مورد نحوه عملکرد موتور جستجوی تصویریک تصویر باید حاوی عبارات مرتبط در متا داده و متن اطراف خود و با کیفیت بالا باشد. همچنین، تصویر باید به اندازه کافی شبیه به تصاویر دیگر باشد تا گوگل بداند مرتبط است.برخی از نکات برجسته:اصطلاحات با تصاویر مرتبط هستند و برای مطابقت با پرس و جو استفاده می شوندگوگل از TF-IDF برای ارزیابی ارتباط یک عبارت با یک تصویر استفاده می کندهرچه عبارات مرتبط با تصاویر مرتبط باشد، احتمال بازیابی تصاویر در حین جستجو بیشتر استهر چه یک تصویر شبیه به همه تصاویر رتبه بندی شده برای یک پرس و جو بیشتر باشد، رتبه بهتری خواهد داشتمنحصر به فرد بودن تصویر به عنوان بخشی از امتیاز کیفیت تصویر محاسبه می شودشباهت با استفاده از شباهت ویژگی و داده های کلیک کاربران تخمین زده می شودوزن همه ویژگی های تصویر بسته به پرس و جو یکسان نیستهرچه کیفیت تصویر بالاتر باشد، رتبه بهتری خواهد داشتتغییرات کوچک تصاویر ممکن است منجر به این شود که تصاویر تکراری، منحصر به فرد در نظر گرفته شوندنشانه‌ها، اشیاء و افراد برای گوگل هنگام تجزیه و تحلیل تصاویر مهم می‌باشداجزای اصلی موتور جستجوی تصویرماژول ها (یا نرم افزارهای) جداگانه در موتور جستجوی تصویر در پردازش پرس و جو، پردازش تصاویر و رتبه بندی نتایج جستجو نقش دارند. موتور جستجوی تصویر از تمام این ماژول‍های مجزا در الگوریتم خود استفاده می‍کند.ماژول خزیدن تصویرماژول شرایط تصویرماژول ویژگی های تصویرماژول شباهت تصویرماژول احتمالاتماژول نمایه سازی تصویرسرور جستجوی تصویرماژول امتیازدهی و رتبه بندیمخزن تصاویر و فهرست تصاویرReference:[1] https://www.jcchouinard.com/google-image-search-engine/[2] https://en.wikipedia.org/wiki/Reverse_image_search[3] https://www.stanventures.com/blog/image-algorithm-seo/[4] https://www.linkedin.com/pulse/how-google-using-ai-computer-vision-lens-janak-sawale/[5] https://dsp.stackexchange.com/questions/5995/what-algorithm-does-google-use-for-its-search-by-image-site[6] https://www.quora.com/How-does-a-Google-image-search-engine-work[7] https://en.wikipedia.org/wiki/Scale-invariant_feature_transform[8] https://en.wikipedia.org/wiki/Maximally_stable_extremal_regions[9] https://en.wikipedia.org/wiki/Bag-of-words_model_in_computer_vision[10] https://en.wikipedia.org/wiki/Content-based_image_retrieval[11] https://en.wikipedia.org/wiki/Google_Images[12] https://en.wikipedia.org/wiki/Exif[13] https://www.jcchouinard.com/tf-idf/</description>
                <category>عباس خدائیان</category>
                <author>عباس خدائیان</author>
                <pubDate>Sat, 15 Oct 2022 10:29:28 +0330</pubDate>
            </item>
            </channel>
</rss>