Mục lục:
- Bước 1: Chụp ảnh
- Bước 2: Tải hình ảnh vào MATLAB
- Bước 3: Phân tích hình ảnh
- Bước 4: Tính chiều rộng của ô trắng trên bàn cờ
- Bước 5: Lặp lại các Bước 3 và 4 cho Hình ảnh Kiểm tra
- Bước 6: Tính độ phóng đại của thấu kính
- Bước 7: Tìm bình phương R và đơn thuốc của người dùng thông qua phép nội suy
- Bước 8: Hiển thị Đơn thuốc của Người dùng trên Biểu đồ
- Bước 9: Thu hẹp đơn thuốc của bạn
Video: Tạo nhãn cầu Đơn thuốc cho nhãn cầu của bạn: Dự án BME60B: 9 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:30
Bởi: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste
Độ phóng đại là một trong những tính năng chính hiện nay của kính đọc sách, được phân loại theo đơn vị đi-ốp của chúng. Theo Đại học Công nghệ Michigan, một diopter là độ dài tiêu cự của ống kính, thường được đo bằng mm, đơn vị đo là mét (Đại học Công nghệ Michigan). Bởi vì kính đọc sách có thấu kính lồi, độ dài tiêu cự sẽ dương, làm cho đi-ốp cũng dương (HyperPhysics). Độ dài tiêu cự tăng lên khi khoảng cách giữa đối tượng càng xa ống kính thực tế, và điều này dẫn đến đi-ốp giảm vì chúng tỷ lệ nghịch. Do đó, việc trang bị kính đọc sách có gắn thêm đi-ốp sẽ giúp ống kính phóng to tầm nhìn để có vẻ như độ dài tiêu cự nhỏ hơn bằng cách tăng giá trị của đi-ốp.
Đoạn mã được trình bày sẽ được sử dụng để dự đoán độ đip của một thấu kính có đơn thuốc không xác định. Hai đầu vào được sử dụng để tính toán đơn thuốc: một bức ảnh chụp phông nền được kiểm soát mà không sử dụng bất kỳ ống kính nào và một bức ảnh khác có cùng phông nền nhưng thông qua ống kính được lựa chọn. Chương trình sẽ đo độ méo giữa hai bức ảnh này. Từ đó, chúng tôi sẽ có thể ước tính độ diop của ống kính và đưa ra kết quả cho người dùng xem.
Đối với Có thể hướng dẫn này, bạn sẽ cần:
- Mẫu bàn cờ đen trắng được in trên tờ giấy 11x8.5
- Máy ảnh có khả năng khóa lấy nét
- Giá ba chân hoặc thứ gì đó tương tự để bảo vệ máy ảnh
- Các đơn thuốc khác nhau của kính đọc sách
- MATLAB
Bước 1: Chụp ảnh
Để tính toán độ phóng đại của ống kính, bạn cần phải so sánh nó với kích thước thực của vật thể. Đối với dự án này, chúng tôi sẽ so sánh một hình ảnh phóng đại với một hình ảnh điều khiển.
Vì vậy, bước đầu tiên là chụp hai bức ảnh của cùng một hình ảnh - bức ảnh đầu tiên chỉ qua máy ảnh và bức ảnh thứ hai qua thấu kính của kính đọc mà bạn muốn kiểm tra.
Bạn sẽ chụp ảnh bàn cờ đen trắng 8,5x11in với lưới 1in. Thiết lập máy ảnh của bạn cách bàn cờ 11 inch. Trước khi chụp ảnh, hãy khóa tiêu điểm trên bàn cờ.
Chụp ảnh bàn cờ mà không cần kính đọc sách. Sau đó, không di chuyển bất cứ thứ gì, hãy đặt kính đọc sách trước máy ảnh và chụp bức ảnh thứ hai.
Đảm bảo rằng vị trí của máy ảnh không di chuyển giữa các lần chụp. Điều duy nhất nên thay đổi giữa hai bức ảnh là sự hiện diện của thấu kính kính ở phía trước máy ảnh.
Khi bạn hoàn thành các bức ảnh, hãy tải chúng lên máy tính của bạn.
Bước 2: Tải hình ảnh vào MATLAB
Mở một tập lệnh mới.
Đầu tiên, chỉ định thư mục lưu trữ ảnh. Sau đó, sử dụng chức năng dir để trích xuất hình ảnh-j.webp
Dir = 'C: / Users / kuras / Desktop / class / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');
Đối với dự án của chúng tôi, chúng tôi muốn nhắc người dùng chương trình về những tệp họ muốn so sánh. Phần đầu tiên yêu cầu người dùng chỉ định hình ảnh điều khiển và phần thứ hai yêu cầu người dùng chỉ định hình ảnh kiểm tra.
- % Hỏi người dùng tệp nào là hình ảnh điều khiển.
- Control = input ('# of control image. / N');
- ControlFile = [GetDir (Control).name]
- Hỏi người dùng tệp nào là hình ảnh mà họ muốn phân tích.
- ChooseFile = input ('\ n # hình ảnh bạn muốn phân tích. / N');
- PrescripFile = [GetDir (ChooseFile).name];
Bước 3: Phân tích hình ảnh
Hình ảnh màu trong MATLAB có kích thước MxNx3, trong khi hình ảnh thang độ xám là MxN. Điều này có nghĩa là việc nâng cao / chỉnh sửa hình ảnh thang độ xám sẽ nhanh hơn vì có ít dữ liệu hơn để theo dõi. Sử dụng rgb2gray để chuyển đổi hình ảnh sang thang độ xám. (Chức năng imrotate đã được sử dụng vì ảnh của chúng tôi nằm ngang - dòng mã này có thể cần thiết hoặc có thể không cần thiết trong phiên bản của bạn.)
- % chuyển đổi sang thang độ xám và xoay
- I = imread (ControlFile);
- I = rgb2gray (I);
- I = imrotate (I, 90);
Tiếp theo, hiển thị hình ảnh. Chức năng subplot được sử dụng để hình ảnh kiểm tra sẽ có thể ở bên cạnh điều khiển trong các bước sau.
- %trưng bày
- Hình 1);
- subplot (1, 2, 1)
- imshow (tôi);
- tiêu đề (ControlFile);
Sử dụng imcrop để nhắc người dùng cắt bàn cờ ra khỏi hình ảnh đầy đủ. Đoạn mã sau cũng hiển thị một hộp thông báo để cung cấp hướng dẫn cho người dùng.
- % cắt ra bảng kiểm tra để phân tích
- waitfor (msgbox ({'Sử dụng các sợi nhỏ để cắt ra bàn cờ.', 'Sau đó nhấp đúp vào vùng quan tâm.'}));
- I_crop = imcrop (I);
Sử dụng mã hóa để mã hóa hình ảnh.
I_binary = precision (I_crop);
Bước 4: Tính chiều rộng của ô trắng trên bàn cờ
Tiếp theo, nhắc người dùng vẽ một đường ngang qua hình ảnh bằng cách sử dụng imline. Dòng này phải chạy theo chiều ngang trên bàn cờ. Nó phải bắt đầu và kết thúc trên một hình vuông màu đen (không quan trọng ở đâu) - điều này là do chúng tôi sẽ đo chiều rộng của các hình vuông màu trắng, không phải các hình vuông màu đen.
- %vẽ đường thẳng
- Hình 1)
- subplot (1, 2, 1)
- imshow (I_binary);
- waitfor (msgbox ({'Nhấp và kéo để vẽ đường kéo dài 9 ô, từ khoảng đen đến khoảng đen.', 'Nhấp đúp để xác nhận.'}));
- dòng = imline;
- vị trí = đợi (dòng);
- endpoints = line.getPosition;
Trích xuất các coodinates X và Y cho các điểm cuối của đoạn thẳng đã vẽ.
- X = điểm cuối (:, 1)
- Y = endpoints (:, 2);
Sử dụng ứng biến để tạo biểu đồ dựa trên cường độ được tìm thấy dọc theo đường vẽ. Điều này sẽ giống như một làn sóng vuông từ 0 (đen) đến 1 (trắng). Tính toán các đỉnh và cả vị trí của chúng.
- Hình 2)
- subplot (1, 2, 1)
- title ('Cường độ hình ảnh trên dòng ngẫu hứng (Điều khiển)')
- ngẫu hứng (I_binary, X, Y); lưới điện trên;
- [~, ~, c1, ~, ~] = randomfile (I_binary, X, Y);
- [peak, loc] = findpeaks (c1 (:,:, 1));
- Giữ lấy
- plot (loc, peak, 'ro');
- giữ lại
Tìm độ dài của mỗi bình nguyên trên đồ thị ứng biến bằng cách sử dụng vòng lặp for. Chạy vòng lặp for cho cùng một lượng đỉnh có trong biểu đồ ứng suất. Để tính chiều dài của mỗi bình nguyên, hãy sử dụng chức năng ‘find’ để tìm tất cả các vị trí có giá trị cường độ ‘1’ thay vì ‘0’. Sau đó, tính chiều dài của mảng đó để có tổng chiều dài của bình nguyên, chiều dài này sẽ bằng chiều rộng của hình vuông màu trắng tính bằng pixel. ControlPlateauList = zeros (1, length (loc));
for i = 1: length (loc)
nếu tôi == chiều dài (loc)
cao nguyên = find (c1 (loc (i): end,:, 1));
khác
cao nguyên = find (c1 (loc (i): loc (i + 1) -1,:, 1));
kết thúc
ControlPlateauList (i) = length (bình nguyên);
kết thúc
Bước 5: Lặp lại các Bước 3 và 4 cho Hình ảnh Kiểm tra
* Lưu ý: khi vẽ đường ngẫu hứng trên hình ảnh kiểm tra, hãy nhớ vẽ nó ngang qua các ô vuông tương ứng với đường bạn đã vẽ trên hình ảnh đối chứng.
Bước 6: Tính độ phóng đại của thấu kính
Các phép đo phóng đại được tính bằng cách chia giá trị trung bình của chiều dài bình nguyên, được tính ở bước 5, cho trung bình của chiều dài bình nguyên đối chứng, được tính ở bước 4. Giá trị này được tính là 1,0884.
độ phóng đại = trung bình (danh sách cao nguyên) / trung bình (ControlPlateauList);
Bước 7: Tìm bình phương R và đơn thuốc của người dùng thông qua phép nội suy
Sử dụng mã:
- md1 = fitlm (GivenPrescription, MagArray);
- Rsquared = md1. Rsquared. Ordinary;
Chúng ta có thể tìm giá trị bình phương R của biểu đồ GivenPresciption (các giá trị đã cho của ống kính của chúng tôi) so với MagArray (một mảng các tỷ lệ đo độ phóng đại mà chúng tôi đã tính toán trước đó). Bằng cách có giá trị bình phương R đủ cao, có thể suy ra rằng có một mối tương quan đủ mạnh để biện minh cho việc sử dụng phương pháp này. Đối với trường hợp cụ thể này, giá trị bình phương R là 0,9912, điều này cho thấy mối tương quan chặt chẽ và do đó được chứng minh khi sử dụng phương pháp này trong phân tích.
Sử dụng chức năng:
Toa = interp1 (MagArray, GivenPrescription, phóng đại, 'tuyến tính');
Chúng tôi có thể nội suy giá trị đơn thuốc tương ứng (trên trục x) của tỷ lệ phóng đại (một giá trị trên trục y) và tìm đơn thuốc của người dùng.
Việc nội suy dữ liệu là quan trọng để phương pháp này hoạt động vì nó cho phép chúng ta đưa ra các giả định về thông tin chúng ta không có, dựa trên thông tin chúng ta có. Mặc dù một dòng phù hợp nhất về mặt kỹ thuật sẽ là một ứng cử viên mạnh mẽ hơn cho giả định này, nhưng việc tạo ra ranh giới để giảm số lượng đầu ra phục vụ hiệu quả tương tự như kính thuốc dù sao cũng có giá trị đồng nhất gia tăng. Điều này được giải thích trong các bước sau.
Bước 8: Hiển thị Đơn thuốc của Người dùng trên Biểu đồ
Sử dụng mã sau:
- nhân vật;
- cốt truyện (GivenPrescription, MagArray, '-g')
- Giữ lấy
- âm mưu (Kê đơn, độ phóng đại, 'bp')
- giữ lại
- lưới
- chú giải ('Dữ liệu', 'Điểm nội suy', 'Vị trí', 'NW')
Chúng tôi có thể vẽ biểu đồ cho thấy Tỷ lệ độ phóng đại so với Đơn thuốc đã cho bằng đường màu xanh lá cây và dữ liệu tìm thấy về độ phóng đại được tính toán của chúng tôi so với đơn thuốc nội suy của chúng tôi bằng một ngôi sao màu xanh lam. Sau đó, chú giải gắn nhãn tiêu đề, trục x và trục y và đặt chú giải ở góc trên cùng bên trái.
Bước 9: Thu hẹp đơn thuốc của bạn
Mã sau được sử dụng để làm tròn cho đơn thuốc:
-
nếu Đơn thuốc <= 1.125
CalculatedPrescription = '1.0';
-
elseif Đơn thuốc <= 1.375
CalculatedPrescription = '1,25';
-
elseif Đơn thuốc <= 1.625
CalculatedPrescription = '1,5';
-
elseif Đơn thuốc <= 1.875
CalculatedPrescription = '1,75';
-
elseif Đơn thuốc <= 2,25
CalculatedPrescription = '2.0';
-
elseif Đơn thuốc <= 2.625
CalculatedPrescription = '2,5';
-
elseif Đơn thuốc <= 3
CalculatedPrescription = '2,75';
-
elseif Đơn thuốc <= 3.375
CalculatedPrescription = '3,25';
-
khác
CalculatedPrescription = 'chưa biết';
- kết thúc
Đơn thuốc được tìm thấy thông qua phép nội suy không nhất thiết phản ánh đơn thuốc thực tế - điều này là do sẽ luôn có những thay đổi nhỏ trong việc phân tích bức ảnh do lỗi của con người. Như vậy, chúng ta cần bước này để phân loại đơn thuốc thực tế.
Các đơn thuốc được kê thường bắt đầu từ 1,0 diop và tăng thêm 0,25 trong đơn thuốc của họ, vì vậy sau khi tính toán đơn thuốc, chúng tôi muốn xác định đơn thuốc phù hợp nhất với những gì người dùng có thể cần. Sau khi tính toán đơn thuốc, chúng tôi chạy nó qua các câu lệnh If đã cho để kiểm tra giá trị của nó và xác định đơn thuốc nào là cần thiết. Bất cứ giá trị nào nhỏ hơn hoặc bằng 1,125 thì đơn thuốc là 1,0. Bất cứ điều gì nhỏ hơn hoặc bằng 1,375, đơn thuốc là 1,25. Bất cứ điều gì nhỏ hơn hoặc bằng 1,625, đơn thuốc là 1,5. Bất cứ điều gì nhỏ hơn hoặc bằng 1.845, đơn thuốc là 1.75. Và như thế.
Chúng tôi có các giá trị tăng lên vì chúng tôi đang kiểm tra xem các giá trị có nhỏ hơn không. Nếu chúng ta đã giảm các giá trị thì câu lệnh if đầu tiên sẽ đọc câu lệnh if đầu tiên mọi lúc. Nếu đơn thuốc là nhỏ nhất, chúng tôi muốn nó nhận ra nó là nhỏ nhất ngay lập tức, đó là lý do tại sao giá trị nhỏ nhất là giá trị mà chúng tôi bắt đầu. Bất kỳ điều gì cao hơn giá trị cao nhất có nghĩa là đơn thuốc không nằm trong phạm vi dữ liệu của chúng tôi, vì vậy nó sẽ cung cấp giá trị chuỗi "Không xác định".
Đề xuất:
Tự tạo Máy tạo sương mù siêu âm siêu đơn giản của riêng bạn: 4 bước
Tự tạo Máy tạo sương mù siêu âm siêu đơn giản của riêng bạn: Trong dự án này, tôi sẽ hướng dẫn bạn cách tạo một mạch trình điều khiển đơn giản cho một đĩa áp điện siêu âm 113kHz. Về cơ bản, mạch bao gồm một mạch hẹn giờ 555, một MOSFET và một vài thành phần bổ sung. Trên đường đi, tôi sẽ
Nhà tuyển dụng Robo của Makerspace - Nhận câu trả lời cho các câu hỏi thường gặp của bạn: 4 bước
Nhà tuyển dụng Robo của Makerspace - Nhận câu trả lời cho các câu hỏi thường gặp của bạn: Năm ngoái, tôi đã trình bày với hiệu trưởng nhà trường về ý tưởng tổ chức một lớp Makerspace ngoại khóa dành cho những sinh viên tò mò muốn biết mọi thứ về mọi công cụ mà chúng tôi có. Vì vậy, cuối cùng khi anh ấy đồng ý, tôi biết tôi phải thu hút tất cả sự quan tâm của học sinh
Tạo một ứng dụng đơn giản cho điện thoại thông minh của bạn (không cần mã hóa): 10 bước
Tạo ứng dụng đơn giản cho điện thoại thông minh của bạn (không cần mã hóa): CẬP NHẬT: Kỹ thuật này đã lỗi thời, hiện có nhiều cách khác để tạo ứng dụng .. điều này có thể không hoạt động nữa. Ứng dụng được xuất bản đầu tiên của tôi có sẵn để tải xuống trên Ứng dụng Android Thị trường ở đây. Sau đây là hướng dẫn nhanh về cách thực tế bất kỳ
Cách biến điện thoại di động LG EnV 2 của bạn thành một Modem quay số di động cho máy tính xách tay (hoặc máy tính để bàn) của bạn: 7 bước
Cách biến điện thoại di động LG EnV 2 của bạn thành một Modem quay số di động cho máy tính xách tay (hoặc máy tính để bàn) của bạn: Tất cả chúng ta đều có nhu cầu sử dụng Internet ở những nơi không thể, chẳng hạn như trong ô tô hoặc trong kỳ nghỉ, nơi họ tính một khoản tiền đắt đỏ mỗi giờ để sử dụng wifi của họ. cuối cùng, tôi đã nghĩ ra một cách đơn giản để
Làm cho máy ảnh của bạn thành "chế độ chụp đêm quân sự", thêm hiệu ứng ban đêm hoặc tạo chế độ chụp ảnh ban đêm trên bất kỳ máy ảnh nào !!!: 3 bước
Đặt Máy ảnh của bạn thành "Chế độ chụp đêm quân sự", Thêm Hiệu ứng Ban đêm hoặc Tạo Chế độ Cảnh báo Ban đêm trên Bất kỳ Máy ảnh nào !!!: *** Điều này đã được đưa vào CUỘC THI KỸ THUẬT SỐ DAYS PHOTO , Hãy bình chọn cho tôi ** * Nếu bạn cần bất kỳ trợ giúp nào, vui lòng gửi email: [email protected] Tôi nói tiếng Anh, Pháp, Nhật, Tây Ban Nha và tôi biết các ngôn ngữ khác nếu bạn