Matlab Trong Xử Lý ảnh: Cơ Bản ảnh Grayscale (part 1) | Vi Mạch

Vi Mạch - Diễn đàn Vi Mạch Vi Mạch - Diễn đàn Vi Mạch
  • Home
  • Forums New posts
  • What's new Featured content New posts New profile posts Latest activity
  • Members Current visitors New profile posts
Đăng nhập Register Có gì mới? Menu Install the app Install How to install the app on iOS

Follow along with the video below to see how to install our site as a web app on your home screen.

Note: This feature may not be available in some browsers.

Matlab trong xử lý ảnh: Cơ bản ảnh Grayscale (part 1)
  • Thread starter Thread starter Lu ROm
  • Ngày gửi Ngày gửi 26 Tháng mười 2015
  • Replies 0
  • Views 15342
  • Home
  • PHẦN MỀM ỨNG DỤNG
  • LẬP TRÌNH
  • MATLAB
You are using an out of date browser. It may not display this or other websites correctly.You should upgrade or use an alternative browser. Lu ROm

Lu ROm

Administrator
Staff member 25 Tháng bảy 2014 481 119 43 32 One piece vimach.net 1, Biểu diễn hình ảnh: - Trong phần này, chúng ta sẽ tìm hiểu về ảnh Grayscale (ảnh xám) bởi vì ảnh xám là định dạng thích hợp để xử lý ảnh. Ngay cả trong trường hợp yêu cầu nhiều màu sắc, một hình ảnh màu RGB có thể bị phân tách và xử lý thành ba hình ảnh grayscale riêng biệt. Hình ảnh Indexed cũng được chuyển đổi sang màu xám hoặc RGB cho hầu hết các thao tác. Một số định nghĩa về các loại hình ảnh trong bài này. - Lưu ý rằng phạm vi giá trị phụ thuộc vào lớp kiểu dữ liệu: ví dụ, [0,1] là kiểu double. Nếu đó là uint8, phạm vi mà Matlab hiểu sẽ là [0:255]. a, Ảnh Grayscale - Dưới đây là một hình ảnh và được load vào matlab. Bạn có thể kiếm riêng cho mình một ảnh trên web hoặc lấy ảnh phía dưới. Einstein.jpg - Đầu tiên, ta cần load ảnh đó vào matlab: Mã: img = imread('Einstein.jpg'); imshow(img); - Chúng ta sử dụng hàm size() để kiểm tra kích thước ảnh và giá trị pixel( cường độ) của ảnh: Mã: >> size(img) ans = 845 915 3 - Hình ảnh trên có giá trị là 845x915 với 3 là biểu diễn màu RGB. Vì thế, ảnh trên thực chất chất không phải là một ảnh xám. - Tiếp túc chúng ta kiểm tra từng giá trị pixel : Mã: >> img(400,400,:) ans(:,:,1) = 22 ans(:,:,2) = 24 ans(:,:,3) = 19 >> img(350,500,:) ans(:,:,1) = 113 ans(:,:,2) = 117 ans(:,:,3) = 116 - Các giá trị của ba thành phần gần giống hệt nhau, nó gần như là một ảnh xám nếu ta chỉ nhìn vào mà không kiểm tra. Vì thế, để chuyển đổi hình ảnh trên thành màu xám hoàn toàn, ta cần dùng câu lệnh sau rgb2gray(). Hàm rgb2gray() chuyển đổi hình ảnh RGB thành ảnh xám bằng cách loại bỏ các thông tin màu sắc và độ bão hòa trong khi giữ lại độ sáng. Mã: img = imread('Einstein.jpg'); gray = rgb2gray(img); imshow(gray); - Bây giờ ta tiếp tục kiểm tra kích thước bằng hàm size(): Mã: >> size(gray) ans = 845 915 - Gía trị của ảnh bây giờ là 845x915, số 3 đã mất, và hình ảnh trên không còn là ảnh RGB nữa. Tiếp tục kiểm tra từng giá trị pixel ta được: Mã: >> gray(400,400,:) ans = 23 >> gray(350,500,:) ans = 116 - Mỗi pixel chỉ có một giá trị duy nhất, phù hợp với định nghĩa của ảnh xám. b, Chuyển đổi sang màu xám thủ công Cách ở trên ta dùng hàm rgb2gray() chuyển đổi các hình ảnh RGB thành hình ảnh màu xám. Nhưng có một cách khác mà chúng ta có thể thực hiện việc chuyển đổi mà không dùng hàm bằng cách sử dụng công thức chuyển đổi tiêu chuẩn NTSC được đề xuất bởi MathWorks: Mã: intensity = 0.2989*red + 0.5870*green + 0.1140*blue - Vì vậy, hình ảnh trên có thể dễ dàng chuyển qua ảnh xám bằng công thức trên. Dưới đây là ví dụ: Mã: rgb = imread('Einstein.jpg'); gray_manual = 0.2989 * rgb(:,:,1) + 0.5870 * rgb(:,:,2) + 0.1140 * rgb(:,:,3); imshow(gray); - Kiểm tra giá trị từng pixel, chúng ta có thể thấy các giá trị bằng với các giá trị khi dùng hàm chuyển đổi: Mã: >> gray_manual(400,400,:) ans = 23 >> gray_manual(350,500,:) ans = 116 - Kết luận: chúng ta có 2 cách để chuyển đổi một ảnh RGB thành ảnh xám đó là dùng hàm hoặc thủ công. c, Tạo hình ảnh xám trong matlab - Trong phần này, chúng ta sẽ tạo ra hai hình ảnh màu xám kích thước 320 × 240: một với tất cả các pixel là màu đen và một là tất cả các pixel đều là màu trắng: Mã: h = 240; w = 320; white = uint8(255*ones(h,w)); black = uint8(zeros(h,w)); figure; subplot(121); imshow(white); subplot(122); imshow(black); white_black.png d,Các chỉ số hình ảnh - Các bạn tải file ảnh này về: cameraman.tif. - Thông tin về hình ảnh trên: Mã: >> imfinfo('cameraman.tif') ans = Filename: [1x83 char] FileModDate: '14-Apr-2014 12:53:51' FileSize: 65126 Format: 'tif' FormatVersion: [] Width: 256 Height: 256 BitDepth: 8 ColorType: 'grayscale' FormatSignature: [73 73 42 0] ByteOrder: 'little-endian' NewSubFileType: 0 BitsPerSample: 8 Compression: 'PackBits' PhotometricInterpretation: 'BlackIsZero' StripOffsets: [8 8262 16426 24578 32492 40499 48599 56637] SamplesPerPixel: 1 RowsPerStrip: 32 StripByteCounts: [8254 8164 8152 7914 8007 8100 8038 8235] XResolution: 72 YResolution: 72 ResolutionUnit: 'Inch' Colormap: [] PlanarConfiguration: 'Chunky' TileWidth: [] TileLength: [] TileOffsets: [] TileByteCounts: [] Orientation: 1 FillOrder: 1 GrayResponseUnit: 0.0100 MaxSampleValue: 255 MinSampleValue: 0 Thresholding: 1 Offset: 64872 - Chúng ta cần đọc ảnh vào và chuyển đổi ảnh thành ảnh indexed: Mã: I = imread('cameraman.tif'); [X, map] = gray2ind(I, 16); - Tiếp theo chúng ta kiểm tra kích thước map (biểu đồ) của ảnh mới tạo: Mã: >> size(map) ans = 16 3 - Gía trị map có 16 RGB như chúng ta quy định trong lệnh. Chúng ta có thể xem các giá trị: Mã: 0 0 0 0.0667 0.0667 0.0667 0.1333 0.1333 0.1333 0.2000 0.2000 0.2000 0.2667 0.2667 0.2667 0.3333 0.3333 0.3333 0.4000 0.4000 0.4000 0.4667 0.4667 0.4667 0.5333 0.5333 0.5333 0.6000 0.6000 0.6000 0.6667 0.6667 0.6667 0.7333 0.7333 0.7333 0.8000 0.8000 0.8000 0.8667 0.8667 0.8667 0.9333 0.9333 0.9333 1.0000 1.0000 1.0000 -Chúng ta có 16 hàng của RGB và mỗi hàng tương ứng với chỉ số được lưu trữ trong ảnh indexed X với kích thước (256 x 256). -Kiểm tra pixel ở (128, 128) và xem chỉ số pixel đó: Mã: >> X(128,128) ans = 9 - Chỉ số của điểm ảnh là 9. Điều đó có nghĩa là giá trị RGB của hàng thứ 9 của map là: 0,6000 0,6000 0,6000. - Bây giờ chúng ta cần lập bản đồ của các chỉ số thông tin của ảnh X với các giá trị RGB : Mã: I = imread('cameraman.tif'); [X, map] = gray2ind(I, 16); imshow(X, map); cameraman_imshow.png **Bảng colormap built_in_colormap.png Biểu đồ màu jet là biểu đồ màu mặc định. Vì vậy, khi chúng ta sử dụng lệnh colormap , nó sẽ hiển thị biểu đồ màu jet: Mã: >> colormap ans = 0 0 0.5625 0 0 0.6250 0 0 0.6875 0 0 0.7500 0 0 0.8125 0 0 0.8750 0 0 0.9375 0 0 1.0000 0 0.0625 1.0000 0 0.1250 1.0000 0 0.1875 1.0000 0 0.2500 1.0000 0 0.3125 1.0000 0 0.3750 1.0000 0 0.4375 1.0000 0 0.5000 1.0000 0 0.5625 1.0000 0 0.6250 1.0000 0 0.6875 1.0000 0 0.7500 1.0000 0 0.8125 1.0000 0 0.8750 1.0000 0 0.9375 1.0000 0 1.0000 1.0000 0.0625 1.0000 0.9375 0.1250 1.0000 0.8750 0.1875 1.0000 0.8125 0.2500 1.0000 0.7500 0.3125 1.0000 0.6875 0.3750 1.0000 0.6250 0.4375 1.0000 0.5625 0.5000 1.0000 0.5000 0.5625 1.0000 0.4375 0.6250 1.0000 0.3750 0.6875 1.0000 0.3125 0.7500 1.0000 0.2500 0.8125 1.0000 0.1875 0.8750 1.0000 0.1250 0.9375 1.0000 0.0625 1.0000 1.0000 0 1.0000 0.9375 0 1.0000 0.8750 0 1.0000 0.8125 0 1.0000 0.7500 0 1.0000 0.6875 0 1.0000 0.6250 0 1.0000 0.5625 0 1.0000 0.5000 0 1.0000 0.4375 0 1.0000 0.3750 0 1.0000 0.3125 0 1.0000 0.2500 0 1.0000 0.1875 0 1.0000 0.1250 0 1.0000 0.0625 0 1.0000 0 0 0.9375 0 0 0.8750 0 0 0.8125 0 0 0.7500 0 0 0.6875 0 0 0.6250 0 0 0.5625 0 0 0.5000 0 0 - Kích thước của map: Mã: >> size(colormap) ans = 64 3 You must log in or register to reply here. Share: Facebook X (Twitter) LinkedIn Reddit Pinterest Tumblr WhatsApp Email Share Link
  • Home
  • PHẦN MỀM ỨNG DỤNG
  • LẬP TRÌNH
  • MATLAB
Top Bottom

Từ khóa » Chuyển ảnh Rgb Sang Gray