Talaan ng mga Nilalaman:
- Hakbang 1: Mga Kinakailangan
- Hakbang 2: Mga Kinakailangan (hindi)
- Hakbang 3: Mga Kinakailangan (hindi)
- Hakbang 4: Mga Kinakailangan (hindi)
- Hakbang 5: Linisin ang Matlab upang Maghanda para sa Running Code
- Hakbang 6: Pumili ng 10 Mga Karaniwang Mga Imahe ng Mata at 10 Mga Larawan Na May Mga Sintomas ng Diabetic Retinopathy
- Hakbang 7: Pumili ng 10 Mga Karaniwang Mga Imahe ng Mata at 10 Mga Larawan Na May Mga Diabetes na Retinopathy na Sintomas (hindi)
- Hakbang 8: Lumikha ng 2 Mga variable (Normal at Diagnosed) at Itakda ang mga ito sa bawat Katumbas sa 0
- Hakbang 9: Lumikha ng isang para sa Loop upang Awtomatikong Mag-upload ng Mga Karaniwang Larawan
- Hakbang 10: Lumikha ng isang para sa Loop upang Awtomatikong Mag-upload ng Mga Karaniwang Larawan (hindi)
- Hakbang 11: I-crop ang Mga Hangganan ng Imahe
- Hakbang 12: Lumikha ng isang Gray-scale na Imahe
- Hakbang 13: Lumikha ng isang Contrasted Image
- Hakbang 14: Pagandahin ang Kontras na Larawan
- Hakbang 15: Lumikha ng isang Average na Filter
- Hakbang 16: Pagsamahin ang Averaging Filter Sa Contrasted Image
- Hakbang 17: Gumawa ng isang Bagong Kahulugan na Mask sa pamamagitan ng Pagbawas ng Mga Pixel
- Hakbang 18: Lumikha ng isang Binary na Na-filter na Larawan
- Hakbang 19: Alisin ang Mas Maliliit na Mga Blob na Natagpuan sa Mga Na-filter na Larawan
- Hakbang 20: Lumikha ng isang Elemento ng Pag-istraktura ng Disk
- Hakbang 21: Magsagawa ng Morphological Close Operations
- Hakbang 22: Hanapin ang Mga Bagay Na May Pagkonekta ng Least 8
- Hakbang 23: Hanapin ang Maximum na Bilang ng Mga Nakakonektang Pixel
- Hakbang 24: Itakda ang Mga Halaga ng Max Pixel sa 0 at Maghanap ng Mga Pixel Gamit> = 26 Pagkakonekta ng Pixel
- Hakbang 25: Alisin ang Mga Blood Vessel sa Imahe
- Hakbang 26: Pagpapakita ng Larawan
- Hakbang 27: Alisin ang Mga Vessel at Bilangin ang Mga Blob ng Dugo
- Hakbang 28: I-diagnose ang Retinal na Imahe Batay sa Bilang ng Mga Kilalang Dugo na Nakilala
- Hakbang 29: Kung Mayroong Higit sa 5 Mga Blobs …
- Hakbang 30: Ulitin ang Proseso ng Pag-filter para sa Mga Karaniwang Larawan na May Mga Halaga ng Imahe ng Digit Bilang 2 at 3
- Hakbang 31: Ulitin ang Buong Proseso para sa Mga Na-diagnose na Larawan
- Hakbang 32: Pagsusuri sa Istatistika
- Hakbang 33: Paghahanap ng Salig sa Kumpiyansa
Video: Awtomatikong Diagnosis ng Diabetic Retinopathy Sa pamamagitan ng MATLAB: 33 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
(Tingnan ang balangkas ng code sa itaas)
Ang diabetes retinopathy ay isang sakit na may kaugnayan sa diabetes na sanhi ng mataas na antas ng asukal sa dugo. Ang matataas na antas ng asukal sa dugo ay sanhi ng pamamaga ng mga daluyan ng dugo sa mga retina, na humahantong sa pinalaki na mga daluyan ng dugo at maging ang mga paglabas ng daluyan, na humantong sa mga madilim na spot sa mga retinal na imahe. Sa code na ito, nilalayon namin na gamitin ang hitsura ng mga spot na tumutulo ang daluyan ng dugo bilang isang tagapagpahiwatig ng background diabetic retinopathy, kahit na ang karagdagang mga diskarte sa pagsusuri ay kinakailangan sa totoong mundo. Ang layunin ng code na ito ay upang i-automate ang pagproseso ng imahe at pag-diagnose ng mga retinal na imahe upang makilala ang mga palatandaan ng retinopathy ng diabetic na ipinakita sa pamamagitan ng mga madilim na spot sa mga retinal na imahe.
10 normal na retinal na imahe at 10 na-diagnose na retinal na imahe ay naproseso sa pamamagitan ng isang code na unang binabasa at sinala ang mga imahe at pagkatapos ay binibilang ang mga madilim na spot upang matukoy kung ang mga sintomas ng diabetic retinopathy ay naroroon, batay sa isang naibigay na threshold. Ang mga resulta ay naka-print sa window ng utos para sa interpretasyon ng manonood.
Hakbang 1: Mga Kinakailangan
1. Tiyaking mayroon kang nai-download na programa ng MATLAB sa iyong computer.
2. I-download ang txt file na matatagpuan sa link. (Pindutin ang 'ctrl + s' upang makatipid sa parehong direktoryo ng MATLAB Code)
Hakbang 2: Mga Kinakailangan (hindi)
4. Buksan ang MATLAB at i-type ang 'uiimport' sa window ng utos.
5. Piliin ang officialdiagnoses.txt file at i-import ito sa MATLAB bilang isang cell matrix.
6. Tiyaking nakikita mo ang 'officialdiagnoses' bilang isang variable sa workspace.
Hakbang 3: Mga Kinakailangan (hindi)
7. I-download ang pagpapaandar na ModWald.m, na maaaring makuha mula sa itaas na code o i-download ito mula sa Canvas.
(Code na ibinigay ng Propesor King at Propesor Choi)
Hakbang 4: Mga Kinakailangan (hindi)
8. I-download ang 400 hilaw na imahe mula sa seksyon ng data ng The STARE Project.
Hakbang 5: Linisin ang Matlab upang Maghanda para sa Running Code
Idagdag sa code:
1. isara ang lahat (Isinasara ang lahat ng dati nang nakabukas na mga imahe)
2. clearvars - maliban sa mga officialdiagnoses (Inaalis ang lahat ng variable maliban sa opisyal na diagnose na txt file na dating na-import)
3. cclc (Clears Command Window)
Hakbang 6: Pumili ng 10 Mga Karaniwang Mga Imahe ng Mata at 10 Mga Larawan Na May Mga Sintomas ng Diabetic Retinopathy
1. Kunin ang file ng teksto ng diagnosis at kunin ang mga pangalan ng imahe. Ang mga pangalang ito ay nakapaloob sa unang haligi ng text file kaya upang makuha ang mga ito i-type ang 'officialdiagnoses (:, 1)'. Ang matrix ng mga pangalan ng imahe ay itinalaga sa isang variable, "all_image_number"
2. I-convert ang variable ng all_image_number mula sa isang cell array sa isang matrix array gamit ang cell2mat function
Hakbang 7: Pumili ng 10 Mga Karaniwang Mga Imahe ng Mata at 10 Mga Larawan Na May Mga Diabetes na Retinopathy na Sintomas (hindi)
3. Piliin ang 10 normal na mga imahe ng mata upang patakbuhin ang code. Ang mga imaheng napili sa kasong ito ay 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Ilagay ang mga numerong ito sa isang matrix at italaga ang mga ito sa isang variable na tatawagin kapag naglo-load ng mga imahe.
4. Ulitin ang hakbang 3 para sa mga retinal na imahe na na-diagnose na may diabetic retinopathy. Ang mga imaheng napili sa kasong ito ay 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
Hakbang 8: Lumikha ng 2 Mga variable (Normal at Diagnosed) at Itakda ang mga ito sa bawat Katumbas sa 0
Lumikha ng mga variable na ito bago ang para sa loop upang simulan ang mga numero ng loop.
Hakbang 9: Lumikha ng isang para sa Loop upang Awtomatikong Mag-upload ng Mga Karaniwang Larawan
1. Lumikha ng isang para sa loop
2. Magtakda ng variable ng pagbibilang (i, sa kasong ito) sa isang matrix ng mga halagang 1-10. Ang variable ng pagbibilang na ito ay gagamitin upang tawagan ang bawat imahe nang paisa-isa
3. Dalhin ang elemento ng i sa matrix ng mga imahe upang makuha at mai-convert ang pangalan ng imahe mula sa isang string sa isang numero gamit ang function na num2str.
Hanapin ang bilang ng mga digit na naroroon sa pangalan ng imahe gamit ang pagpapaandar ng numel. Italaga ang halagang ito sa isang variable, mga digit_normal. Ang bilang na ito ay dapat na 1 para sa mga nag-iisang numero ng digit, 2 para sa mga dobleng numero ng digit, at 3 para sa mga triple digit na numero. Ang impormasyong ito ay gagamitin upang awtomatikong tumawag sa mga imahe.
Hakbang 10: Lumikha ng isang para sa Loop upang Awtomatikong Mag-upload ng Mga Karaniwang Larawan (hindi)
3. Lumikha ng isang pahayag kung naglalaman ng lahat ng tatlong mga posibilidad mula sa nakaraang mga hakbang. Kung ang pangalan ng imahe ay may 1 digit, ang imahe ay tatawagin bilang "im000", kung mayroon itong 2 digit, ang imahe ay tatawaging "im00", at kung mayroon itong 3 ang imahe ay tatawagin bilang "im0".
4. Sa ilalim ng bawat kung pahayag, magtalaga ng isang variable upang ma-imread ang "im" sa ilalim ng kaukulang, kung pahayag na may naaangkop na bilang ng mga zero (tulad ng inilarawan sa itaas), na sinusundan ng i.
Hakbang 11: I-crop ang Mga Hangganan ng Imahe
Kunin ang orihinal na imahe at maglapat ng isang imcrop filter upang matanggal ang mga itim na hangganan at magtalaga sa isang variable na I_crop. Ang rektanggulo ng ani ay tinukoy gamit ang isang matrix [95, 95, 500, 410].
Hakbang 12: Lumikha ng isang Gray-scale na Imahe
Kunin ang na-crop na imahe at ilapat ang rbg2gray filter upang baguhin ang imahe sa grayscale. Italaga ang imaheng ito sa variable I2.
Hakbang 13: Lumikha ng isang Contrasted Image
Kunin ang imaheng I2 at gamitin ang di-makatarungang upang iligtas ang mga halaga ng intensity.
Kumuha ng mga halagang nasa loob ng saklaw na [0.2, 0.7] at iligtas ang mga ito sa isang [0, 1]. Ang gamma ay nakatakda sa 0.8 upang gawing mas maliwanag ang imahe. Italaga ang bagong imahe sa I_adjusted.
Hakbang 14: Pagandahin ang Kontras na Larawan
Kunin ang I_adjust na imahe at gamitin ang adapthisteq function upang mapahusay ang kaibahan.
Kinakailangan ng syntax ng Adapthisteq ang pangalan ng imahe, I_adjusted, 'numTiles', ang laki ng numTiles, 'nBins', at ang bilang ng mga bin. Ang laki ng numTiles ay nakatakda sa [8 8], na hinahati ang imahe sa 8x8 tile at ang bilang ng mga bins ay nakatakda sa 28. Italaga ang imahe sa I_constrast.
Hakbang 15: Lumikha ng isang Average na Filter
Lumikha ng isang variable na pinangalanang 'meanfilt' gamit ang fsp special function. Ipasok ang 'average function' upang likhain ang average na filter at ipasok ang [90 90] para sa laki ng sliding window.
Hakbang 16: Pagsamahin ang Averaging Filter Sa Contrasted Image
Lumikha ng isang bagong variable na pinangalanang mask_mean at gamitin ang pagpapaandar ng imfilter upang kunin ang I_contrast na imahe at ilapat ang mean filter na dati nang nilikha.
Hakbang 17: Gumawa ng isang Bagong Kahulugan na Mask sa pamamagitan ng Pagbawas ng Mga Pixel
Lumikha ng isang variable na pinangalanang mask_mean2 at gamitin ang imsubtract function upang ibawas ang halaga ng bawat pixel sa I_contrast mula sa kaukulang pixel sa mask_mean.
Hakbang 18: Lumikha ng isang Binary na Na-filter na Larawan
Gawing itim at puti ang mga imahe na grayscale gamit ang imbinarize. Input mask_mean2, 'adaptive', 'ForegroundPolarity', 'dark', 'Sensitivity', 0.6. Italaga ang bagong imaheng ito sa mask_binarize.
Hakbang 19: Alisin ang Mas Maliliit na Mga Blob na Natagpuan sa Mga Na-filter na Larawan
Alisin ang mga bagay na may pagkakakonekta mas mababa sa 100 mga pixel gamit ang pag-andar ng bwareaopen sa mask_binarize at itakda ang halaga ng threshold sa 100. Italaga ang variable bilang bw.
Hakbang 20: Lumikha ng isang Elemento ng Pag-istraktura ng Disk
Lumikha ng isang elemento ng pagbubuo ng disk (na may radius ng 2) gamit ang strel function. Italaga ito sa se.
Hakbang 21: Magsagawa ng Morphological Close Operations
Dalhin ang bw at ilapat ang imclose function sa elemento ng istruktura upang maisagawa ang isang malapit na operasyon ng morphological sa bagay.
Hakbang 22: Hanapin ang Mga Bagay Na May Pagkonekta ng Least 8
Dalhin ang bw at gamitin ang bwconncomp upang hanapin ang mga bagay na may pagkakakonekta ng hindi bababa sa 8 sa imahe. Italaga ang output na numero sa cc_1.
Hakbang 23: Hanapin ang Maximum na Bilang ng Mga Nakakonektang Pixel
Gamitin ang pagpapaandar ng cellfun upang maisagawa ang pagpapaandar na "numel" sa bawat cell sa CC. Mahahanap nito ang bilang ng mga elemento sa PixelIdxList cell. Magtalaga ng Halaga sa "numPixels".
Hanapin ang maximum na mga halaga sa numPIxels. Italaga ang pinakamalaking maximum sa "pinakamalaking" at ang index ng maximum na halaga sa "idx".
Hakbang 24: Itakda ang Mga Halaga ng Max Pixel sa 0 at Maghanap ng Mga Pixel Gamit> = 26 Pagkakonekta ng Pixel
= 26 Pagkakakonekta ng Pixel "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 Pagkakakonekta ng Pixel "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Pixel Connectivity "src =" {{file.large_url | add: 'auto = webp & frame = 1 & taas = 300'%} ">
= 26 Pixel Connectivity "src =" {{file.large_url | add: 'auto = webp & frame = 1 & taas = 300'%} ">
Itakda ang mga pixel na may pinakamalaking halaga sa imaheng "bw" hanggang 0, na ginagawang itim ang mga pixel.
Hanapin ang mga bagay na may pagkakakonekta ng hindi bababa sa 26 mga pixel sa imahe gamit ang bwconncomp. Magtalaga sa variable cc_1.
Hakbang 25: Alisin ang Mga Blood Vessel sa Imahe
Alisin ang mga daluyan ng dugo na naroroon pa rin sa imahe gamit ang pagpapaandar ng bwpropfilt na may saklaw na [0, 0.9].
Ang [0.9, 1] ay hindi kasama dahil ang mga halagang malapit sa 1 ay nagpapahiwatig ng isang linya. Magtalaga sa "RemoveVessels".
Hakbang 26: Pagpapakita ng Larawan
Ipakita ang bawat nai-filter na imahe sa isang subplot. Imshow. na may mga 'border' at 'masikip' na mga input, ipinapakita ang bawat imahe sa isang istrakturang subplot. Magdagdag ng isang pamagat sa bawat imahe upang makilala kung aling filter ang ginamit.
Hakbang 27: Alisin ang Mga Vessel at Bilangin ang Mga Blob ng Dugo
1. Kumuha ng "Alisin ang Mga Bus" at ilapat ang tampok na 'Centroid' sa mga regionprops upang makilala ang mga centroid ng mga bagay sa imahe. Ang mga bagay na ito ay dapat na tumutugma sa mga pamumuo ng dugo na naroroon sa imahe.
2. Bilangin ang bilang ng mga clots ng dugo na kinilala sa pamamagitan ng pagkuha ng haba ng centroid matrix.
Hakbang 28: I-diagnose ang Retinal na Imahe Batay sa Bilang ng Mga Kilalang Dugo na Nakilala
Gumamit kung ang mga pahayag upang masuri ang imahe batay sa bilang ng mga kilalang dugo clots na kinilala.
Kung ang bilang ng mga natukoy na centroids ay mas mababa sa o katumbas ng 5, ang imahe ay nakilala bilang normal.
Kung ang bilang ng mga centroids ay mas malaki sa 5, ang imahe ay nasuri na may diabetic retinopathy.
Ang resulta ay naka-print papunta sa window ng utos gamit ang fprintf.
Hakbang 29: Kung Mayroong Higit sa 5 Mga Blobs …
Ulitin ang mga tagubilin sa itaas para sa mga na-diagnose na imahe bilang ibang pahayag. Tatakbo ang bahaging ito kung ang bilang ng mga bloke ay mas malaki sa 5.
Tapusin ang kung pahayag.
Hakbang 30: Ulitin ang Proseso ng Pag-filter para sa Mga Karaniwang Larawan na May Mga Halaga ng Imahe ng Digit Bilang 2 at 3
Ulitin ang proseso para sa natitirang orihinal kung ang mga pahayag kapag ang numel (ang bilang ng mga digit sa numero ng imahe) ay katumbas ng 2 at 3. Kinukumpleto nito ang para sa loop para sa normal na mga imahe.
Tapusin ang para sa loop.
Hakbang 31: Ulitin ang Buong Proseso para sa Mga Na-diagnose na Larawan
Ulitin ang buong proseso gamit ang mga na-diagnose na imaheng nakalista ng matrix na "mga numero_to_extract_diagnosed".
Siguraduhing dumaan sa bawat figure (i) at baguhin ito sa figure (i + 10) kaya ang mga na-diagnose na numero ay mag-pop up bilang mga imahe 11 hanggang 20.
Hakbang 32: Pagsusuri sa Istatistika
1. Ginagamit ang 'Actual_Diagnosis_Matrix' upang ihambing ang mga resulta sa opisyal na pagsusuri na natagpuan sa txt file. Ipinapahiwatig ng unang 10 zero na ang unang 10 mga imahe ay dapat na normal. Ang huling 10 ay nagpapahiwatig na ang huling 10 mga imahe ay dapat na inuri bilang diabetic retinopathy.
2. Ang dobleng pantay na palatandaan na ginamit upang lumikha ng 'number_correct' ay lumilikha ng isang lohikal na array sa pamamagitan ng paghahambing ng halaga ng mga kaukulang elemento ng 'Actual_Diagnosis_Matrix' sa 'Diagnosis_Matrix' na nilikha mula sa para sa loop.
Para sa bawat elemento na tumutugma sa diyagnosis isang 1 ay idadagdag, nangangahulugang ang code ay na-diagnose nang wasto ang imaheng iyon. Kung ito ay hindi tama magdagdag ito ng isang 0 sa matrix.
Pagkatapos, ang pagkuha ng kabuuan ng na nagdaragdag ng lahat ng mga isa. Sa madaling salita, nahahanap nito ang kabuuan ng mga imahe na na-diagnose nang tama.
3. 'Final_percentage_correct' ay ang kinakalkula na porsyento ng kung gaano katumpak ang code na na-diagnose na diabetic retinopathy. Ang bilang ng mga imaheng na-diagnose nang tama ay nahahati sa 20 (ang kabuuang bilang ng mga larawan) at pinarami ng 100 upang makita ang porsyento ng mga matagumpay na diagnosis.
Hakbang 33: Paghahanap ng Salig sa Kumpiyansa
1. Tiyaking mayroon kang na-download na ModWald.m upang tawagan ito bilang isang pagpapaandar. Kung wala ang pagpapaandar, kakailanganin mong kalkulahin ang agwat ng kumpiyansa gamit ang binagong pamamaraan ng Wald mismo.
2. Ang pagpapaandar ng ModWald ay may 2 mga input kung saan ang una ay ang bilang ng mga kilalang kilalang imahe, at ang pangalawa ay ang kabuuang halaga ng mga imahe.
3. Ang paggana ng ModWald ay maglalabas ng mas mababa at itaas na mga hangganan ng agwat ng kumpiyansa ng mga sukat para sa kawastuhan ng naka-sample na data. Sa madaling salita, bibigyan ka ng isang agwat ng mga porsyento kung saan ang tunay na porsyento ng kawastuhan ng code ay magsisinungaling.
4. Gumamit ng fprintf sa ibaba upang ma-output ang mga istatistika at agwat ng kumpiyansa papunta sa window ng utos.
> fprintf ('%. 0f porsyento ng mga retinal na imahe ay na-diagnose nang tama ayon sa opisyal na pagsusuri. / n / n', Final_percentage_correct)
> fprintf ('Ang totoong porsyento kung saan ang aming code ay makakapag-diagnose nang tama ang diabetic retinopathy ay / n mahuhulog sa saklaw na [%.3f,%.3f], batay sa 20 mga sampol na imahe / n', lower_bound, upper_bound)
Inirerekumendang:
Paghihinang Sa Pamamagitan ng Mga Bahagi ng Hole - Mga Pangunahing Kaalaman sa Paghinang: 8 Hakbang (na may Mga Larawan)
Paghihinang Sa Pamamagitan ng Mga Bahagi ng Hole | Mga Pangunahing Kaalaman sa Paghinang: Sa Maituturo na Ito Magtatalakay ako ng ilang mga pangunahing kaalaman tungkol sa mga soldering through-hole na bahagi sa mga circuit board. Ipagpapalagay ko na nasuri mo na ang unang 2 Mga Tagubilin para sa aking seryeng Mga Panghinang na Pangunahing Kaalaman. Kung hindi mo pa nasuri ang aking In
WiFi Awtomatikong Tagapakain ng Halaman Na May Reservoir - Panloob / Panlabas na Pag-aayos ng Paglilinang - Awtomatikong Mga Halaman ng Tubig na May Remote na Pagsubaybay: 21 Hakbang
Ang WiFi Awtomatikong Tagapakain ng halaman na may reservoir - Pag-set up ng Panloob / Panlabas na Paglilinang - Awtomatikong Mga Halaman ng Tubig Na May Malayuang Pagsubaybay: Sa tutorial na ito ipapakita namin kung paano mag-set up ng isang pasadyang panloob / panlabas na sistema ng feeder ng halaman na awtomatikong nagdidilig ng mga halaman at maaaring subaybayan nang malayuan gamit ang Adosia platform
Awtomatiko sa Bahay: Awtomatikong Lumipat na Lupon na May Dimmer Control Sa Pamamagitan ng Bluetooth Paggamit ng Tiva TM4C123G: 7 Mga Hakbang
Pag-aautomat ng Home: Awtomatikong Lumipat na Lupon na May Dimmer Control Sa Pamamagitan ng Bluetooth Paggamit ng Tiva TM4C123G: Ngayong mga araw na ito, mayroon kaming mga remote control para sa aming mga set sa telebisyon at iba pang mga elektronikong sistema, na ginawang madali ang aming buhay. Naisip mo ba tungkol sa automation sa bahay na magbibigay sa pasilidad ng pagkontrol ng mga ilaw sa tubo, tagahanga at iba pang elec
Ginawa ang Home na Awtomatikong Pag-dispensa ng Tubig na Hugasan ng Basin sa pamamagitan ng Paggamit ng Arduino: 4 na Hakbang
Ang Home Made Automatic Water Dispensing Wash Basin sa pamamagitan ng Paggamit ng Arduino: Ang Layunin ng disenyo na ito ay upang maalis ang tubig mula sa gripo kapag iniunat mo ang iyong kamay upang maghugas sa palanggana nang hindi nadumihan ang gripo at pag-aaksaya ng tubig. Opensource Arduino - Nano board ay ginagamit upang magawa ito. Bisitahin ang aming Website Para sa Source C
I-program ang Iyong PC upang Awtomatikong Patayin sa pamamagitan ng Pagtatalaga Aling Oras na Gusto Mong Gawin Iyon: 4 Mga Hakbang
I-program ang Iyong PC upang Awtomatikong Patayin sa pamamagitan ng Pagtatalaga Aling Oras na Gusto Mong Gawin Iyon: hey, iyon ay isa pang instrabel na kinuha mula sa aking pang-araw-araw na buhay … sa huling pagkakataon kailangan kong mag-download ng maraming software sa aking PC at kailangan ko itong payagan na mag-download magdamag, hindi ko nais na panatilihing naka-on ang aking PC buong gabi matapos ang pagtatapos ng mga pag-download at sa s