Tải bản đầy đủ (.pdf) (46 trang)

Đề Tài Mô Phỏng Thuật Toán Tái Tạo Ảnh Trong Chụp Cắt Lớp Vi Tính.pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.8 MB, 46 trang )

Đề tài: Mơ phỏng thuật tốn tái tạo ảnh trong chụp cắt lớp vi tính
MỤC LỤC
I. Tổng quan .................................................................................................................................................. 2
II. Các hàm xử lý ảnh cơ bản trong Matlab ................................................................................................... 2
1. Đọc và ghi dữ liệu ảnh........................................................................................................................... 2
2. Chuyển đổi giữa các kiểu ảnh ............................................................................................................... 2
3. Các phép toán số học cơ bản đối với dữ liệu ảnh ................................................................................. 4
4. Các hàm hiển thị ảnh trong Matlab ...................................................................................................... 5
5. Các phép biến đổi hình học................................................................................................................... 5
5.1. Phép nội suy ảnh ............................................................................................................................ 5
5.2. Thay đổi kích thước ảnh................................................................................................................. 6
5.3. Phép quay ảnh ............................................................................................................................... 6
5.4. Trích xuất ảnh................................................................................................................................. 7
6. Các hàm tạo nhiễu ................................................................................................................................ 8
6.1. Nhiễu Salt and Pepper: .................................................................................................................. 8
6.2. Nhiễu Gaussian .............................................................................................................................. 9
6.3. Nhiễu Speckle............................................................................................................................... 10
7. Các hàm lọc nhiễu ............................................................................................................................... 12
7.1. Mean filtering (Bộ lọc trung bình) ................................................................................................ 12
7.2. Median filtering ( Lọc trung vị)..................................................................................................... 13
7.3.Lọc Gaussian.................................................................................................................................. 13
8. Phép biến đổi RADON ........................................................................................................................ 14
III. Các phương pháp tái tạo ảnh................................................................................................................. 16
1.

Phương pháp tái tạo ảnh đại số ...................................................................................................... 16

2.

Phương pháp chiếu ngược có lọc ................................................................................................... 18


IV. Chương trình mơ phỏng ........................................................................................................................ 20
1.

Giao diện ......................................................................................................................................... 20

2.

Code Matlab .................................................................................................................................... 21

TÀI LIỆU THAM KHẢO.................................................................................................................................. 46

1


I. Tổng quan
CT là từ viết tắt của Computed Tomography có nghĩa là “chụp ảnh các lát cắt bằng
tính tốn”, CT có khả năng tạo hình ảnh “xun qua” cơ thể bệnh nhân. CT cịn có
tên gọi khác là CAT (Computed axial tomography).

II. Các hàm xử lý ảnh cơ bản trong Matlab
1. Đọc và ghi dữ liệu ảnh
 Hàm imread: đọc các file ảnh với bất kỳ các định dạng ảnh đã biết hiện nay
và lưu lại dưới dạng một ma trận biểu diễn ảnh trong Matlab.
Cú pháp: A = imread(filename,fmt)
filename: là chuỗi xác định tên file cần đọc cùng với đường dẫn (nếu
file này không nằm trong thư mục hiện hành.
fmt : là chuỗi cho biết định dạng của ảnh, thí dụ ‘bmp’, ‘gif’, ‘jpg’,
‘ppm’...
 Hàm imwrite: cho phép lưu một ảnh biểu diễn bằng một ma trân trong Matlab
thành một file ảnh dưới một trong các định dạng đã biết.

Cú pháp: imwrite(A,filename,fmt)
 Hàm imfinfo: dùng để xem các thơng số của một file ảnh nào đó.
Cú pháp: imfinfo (filename,fmt)
Các thông tin được cung cấp bởi hàm imfinfo là: filename, filemoddate,
format, formatversion, width, height, bitdepth, colortype.
2. Chuyển đổi giữa các kiểu ảnh
 Dither: Tạo ảnh nhị phân từ ảnh trắng RGB và ma trận màu map bằng
phương pháp dithering.
dither(RGB,map)
dither(I)
 Gray2ind : : Chuyển ảnh nhị phân BW hoặc ảnh intensity I thành ảnh
indexed thơng qua ma trận tuyến tính gray(n).
Cú pháp:

[X,Map] = gray2ind(IN)
2


[X,Map] = gray2ind(BW,N)
 Grayslice: Chuyển ảnh trắng đen I thành ảnh indexed X bằng cách lấy
ngưỡng. Các giá trị ngưỡng được xác định bởi vector v hoặc bởi n (khi đó
các giá trị ngưỡng là 1/n, 2/n,…(n-1)/n.
Cú pháp:

x = grayslice(I,N)
x = grayslice(I,V)

 Im2bw: Chuyển ảnh trắng đen, ảnh indexed hoặc ảnh RGB thành ảnh nhị
phân BW bằng cách lấy ngưỡng bởi level.
Cú pháp: bw = im2bw(I,level)

bw = im2bw(x,map,level)
bw = im2bw(rgb,level)
 Ind2gray: Chuyển ảnh indexed x với ma trận màu map thành ảnh trắng đen
I.
Cú pháp:

i = ind2gray(x,map)

 Ind2rgb: Chuyển ảnh indenxed x với ma trận màu map thành ảnh RGB.
Cú pháp: rgb=ind2rgb(x,map)
 Mat2gray: Tạo ảnh trắng đen từ ma trận a, amin, amax thuộc
[0(đen),1(trắng)].
Cú pháp: i= mat2gray(a,[amin amax])
 Rgb2gray: Chuyển ảnh RGB thành ảnh trắng đen I.
Cú pháp: i = rgb2gray(rgb)
 Rgb2ind: Chuyển ảnh RGB thành ảnh indexed [X,map].
Cú pháp: [x map] = rgb2ind(rgb,n)
x = rgb2ind(rgb,map)
3


[x,map] = rgb2ind(rgb,tol)
3. Các phép toán số học cơ bản đối với dữ liệu ảnh
Các phép toán số học cơ bản trên các dữ liệu ảnh bao gồm các phép cộng, trừ,
nhân và chia. Tuy nhiên, Matlab chỉ hỗ trợ các phép toán này trên kiểu double nên
cần thực hiện chuyển đổi kiểu trước khi thực hiện. Để giảm bớt thao tác này, trong
IPT có cung cấp các hàm thực hiện các phép tốn số học trên ảnh mà có thể chấp
nhận bất kì kiểu dữ liệu ảnh nào và trả về kết quả thuộc cùng kiểu với các toán hạng.
Các hàm này cũng xử lý các dữ liệu tràn một cách tự động.
 Imabsdiff: Trừ mỗi phần tử của y từ phần tử tương ứng của x, sau đó trả về

trị tuyệt đối của hiệu.
Cú pháp:
z = imabsdiff (x,y)
 Imadd: cộng hai ảnh hoặc cộng một ảnh với một hằng số.
Cú pháp:
z = imadd (x,y,out_class)
 Imcomplement: Lấy bù của ảnh im
Cú pháp:
imcomplement (im)
 Imdivide: Chia các phần tử của ảnh x cho phần tử tương ứng của y, các giá
trị phân số được làm tròn.
Cú pháp:
z = imdivide (x,y)
 Imlincomb: Lấy tổ hợp tuyến tính của các ảnh: z=
k1*a1+k2*a2+…+kn*an+kout_class
Cúpháp: z = imlincomb (k1,a1,k2,a2,…,kn,an,kout_class)
 Immultiply: Nhân hai ảnh hoặc nhân 1 ảnh với 1 hằng số, nếu kết quả bị tràn
thì sẽ được giới hạn lại trong tầm cho phép.
Cú pháp:
z= immultiply (x,y)
 Imsubstract: Trừ hai ảnh hoặc trừ một ảnh với 1 hằng số, nếu kết quả bị
tràn thì sẽ được giới hạn lại trong tầm cho phép.
4


Cú pháp:

z = imsubstract (x,y)

4. Các hàm hiển thị ảnh trong Matlab

Matlab cung cấp hai hàm hiển thị cơ bản là image và imagesc. Ngồi ra trong IPT
cũng có hai hàm hiển thị ảnh khác, đó là imview và imshow.
 Hàm image(X,Y,C): hiển thị hình ảnh biểu diễn bởi ma trân C kích thước
M×N lên trục tọa độ hiện hành X,Y là các vector xác định vị trí các pixel
C(1,1) và C(M,N) trong hệ trục hiện hành.
 Hàm imagesc: có chức năng tương tự như hàm image, ngoại trừ việc dữ liệu
ảnh sẽ được co giãn để sử dụng cho toàn bộ bản đồ màu hiện hành.

 Hàm imview: cho phép hiển thị hình ảnh trên một cửa sổ riêng, nền Java,
gọi là image Viewer. Image Viewer cung cấp các cơng cụ dị tìm và xác định
các giá trị pixel một cách linh hoạt.

 Hàm imshow: cũng tạo một đối tượng đồ họa thuộc loại image và hiển thị
ảnh trên một figure. Hàm imshow sẽ tự động thiết lập các giá trị của các đối
tượng image, axes và figure để thể hiện ảnh.

5. Các phép biến đổi hình học
5.1. Phép nội suy ảnh
Nội suy là quá trình ước lượng giá trị của một điểm nằm giữa hai pixel có giá
trị đã biết.
- IPT cung cấp 3 phương pháp nội suy ảnh: Nội suy theo các lân cận gần nhất,
nội suy song tuyến tính và nội suy bicubic.
- Cả 3 phương pháp đều thực hiện theo nguyên tắc chung: để xác định giá trị
của một pixel ảnh nội suy, ta tìm một điểm trong ảnh ban đầu tương ứng với
5


pixel đó, sau đó giá trị của pixel ở ảnh mới sẽ được tính bằng trung bình có
trọng số của một tập các pixel nào đó ở lân cạn của điểm vừa xác định, trong
đó trọng số của các pixel phụ thuộc vào khoảng cách tới điểm này.

 Phương pháp lân cận nhất (nearest neighbor): pixel mới sẽ được gán giá
trị của pixel chứa điểm tương ứng của nó trong ảnh ban đầu.
 Phương pháp song tuyến tính (bilinear interpolation): pixel mới sẽ được
gán là trung bình có trọng số của các pixel trong một lân cận kích thước
2×2.
 Phương pháp bicubic, pixel mới sẽ được gán là trung bình có trọng số của
các pixel trong một lân cận kích thước 4×4.
5.2. Thay đổi kích thước ảnh
Hàm imresize cho phép người sử dụng thay đổi kích thước ảnh. Ngồi kích thước
ảnh mới, người sử dụng cịn có thể xác định phương pháp nội suy sẽ dùng và loại bộ
lọc dùng để chống nhiễu.
Cú pháp: b = imresize(a,m,method): tạo ảnh b gấp m lần ảnh a.
b = imresize(a,[mrows mcols],method)
b = imresize(a,[mrows mcols],method,N)
b = imresize(a,[mrows mcols],method,h)
Trong đó:
method: phương pháp nội suy sẽ dùng: ‘nearest’, ‘bilinear’,’bicubic’; mặc định là
‘nearest’
5.3. Phép quay ảnh
Để thực hiện phép quay ảnh, ta có thể sử dụng hàm imrotate. Ngồi hai thơng số
cơ bản là ảnh gốc và góc quay, người sử dụng cũng có thể xác định phương pháp nội
suy sẽ dùng và kích thước của ảnh mới.
Cú pháp: b = imrotate (a,angle,method,Bbox)
Trong đó:
a: ảnh gốc
6


angle: góc quay
method: pp nội suy, mạc định là ‘nearest’

Bbox: kích thước ảnh mới: ‘crop’, hoặc ‘loose’. Mặc định là ‘loose’
(tăng kích thước nếu cần).
Chỉ định phương pháp nội suy được sử dụng:
- Theo mặc định, hàm imrotate sử dụng pp nội suy thứ nhất (nearest-neighbor
interpolation) để tính giá trị các pixel trong ảnh ra.
Tuy nhiên, ta có thể chỉ ra các pp nội suy khác như: ‘bilinear’, ‘bicubic’.
Ví dụ: Quay ảnh đi một góc 35° ngược chiều kim đồng hồ, dùng phương pháp nội
suy song tuyến tính:
I = imread('circuit.tif');
J = imrotate(I,35,'bilinear');
K = imrotate(I,35,'bilinear',’crop’);
imshow(I)
figure, imshow(J)
figure, imshow(K)

5.4. Trích xuất ảnh
Khi cần trích xuất một phần ảnh gốc, ta dùng hàm imcrop.
 Xác định cụ thể vị trí của phần ảnh cần trích xuất (dưới dạng hình chữ nhật).
Cú pháp: x2 = imrotate(x,map,rect)
x2 = imrotate(a,rect)

%indexed
%grayscale or RGB

trong đó, rect = [Xmin Ymin width height]
 Sử dụng mouse để chọn phần ảnh cần trích xuất.
7


Ta không cần cung cấp thông số rect, khi thực hiện hàm này, con trỏ sẽ chuyển

sang dạng chữ thập, người dùng sẽ kéo chuột để chọn phần ảnh cần trích xuất sau
đó thả chuột.

6. Các hàm tạo nhiễu

6.1. Nhiễu Salt and Pepper:
- Còn gọi là nhiễu xung, nhiễu nhị phân.

Nếu b > a: -Mức xám b sẽ xuất hiện tương ứng là điểm sáng trên ảnh.
-Mức xám a sẽ tương ứng với điểm đen xuất hiện trên ảnh.
Để cộng nhiễu “Salt & pepper” vào một ảnh ta dùng câu lệnh sau :
Cú pháp:

t = imnoise(image,’salt & pepper’,d)

Trong đó:

d: Mật độ nhiễu

Số lượng nhiễu được cộng vào mặc định là 10%. Ta có thể cung cấp thêm các
thơng số để thay đổi lượng nhiễu được cộng vào này.

8


Hình 1: Ảnh gốc và ảnh nhiễu Salt & Pepper

6.2. Nhiễu Gaussian
- Nhiễu Gaussian là một dạng nhiễu cộng bởi vì tổng của các điểm ảnh ban đầu
và điểm ảnh ngẫu nhiên tạo thành các điểm ảnh thu được khi ảnh có chứa nhiễu

Gaussian . Là một dạng lý tưởng của nhiễu trắng, được gây ra bởi những dao
động ngẫu nhiên của tín hiệu. Nhiễu Gaussian là nhiễu trắng có phân bố chuẩn.

- Nếu ta có ảnh I, nhiễu Gaussian là N ta sẽ có ảnh nhiễu = I +N.
- Để tạo ra ảnh với nhiễu Gaussian ta dùng câu lệnh sau :
Cú pháp:

t = imnoise(image,’gaussian’,d)

- Giá trị mặc định của kỳ vọng và phương sai của nhiễu là 0 và 0.01.

9


Hình 2: Ảnh gốc và ảnh nhiễu Gaussian

6.3. Nhiễu Speckle
- Nhiễu Speckle là một dạng của nhiễu nhân,. có thể được mơ hình bằng cách
nhân các giá trị ngẫu nhiên với giá trị của các pixel (điểm ảnh). Nhiễu Speckle là
vấn đề quan tâm chủ yếu trong các ứng dụng radar.
- Trong Matlab ảnh với nhiễu Speckle được tính tốn : I*(1 + N)
Cú pháp:

t = imnoise(t,’speckle’,d)

- Nhiễu N có phân phối chuẩn với giá trị trung bình =0. Có thể cung cấp thêm
thông số để xác định giá trị kỳ vọng của N, giá trị mặc định của nó là 0.04.

10



Hình 3: Ảnh gốc và ảnh nhiễu Speckie

- Nếu tín hiệu hình ảnh là tín hiệu tuần hồn, chúng ta có thể có ảnh bị ảnh hưởng
bởi nhiễu tuần hồn.
- Hàm imnoise khơng có tùy chọn để tạo ra nhiễu tuần hồn. Ta có thể tạo ra một
dạng đơn giản của nhiễu tuần hoàn bằng cách cộng vào ảnh một ma trận tuần
hồn.
Ví dụ:
AnhNhieu = imnoise('anhgoc', 'salt & pepper', d);
AnhNhieu = imnoise('anhgoc', 'gaussian', d);
AnhNhieu = imnoise('anhgoc', 'localvar', ones(size(anhgoc));
AnhNhieu = imnoise('anhgoc', 'poisson');
AnhNhieu = imnoise('anhgoc', 'speckle', d);
Trong đó:
• anhgoc : Là ảnh xám được biến đổi từ ảnh màu bằng hàm rgb2gray
• d: Là cường độ nhiễu. Muốn tăng giảm cường độ nhiều thì có thể chỉnh số này
tăng nên hoặc giảm đi.
11


• ones(size(anhgoc)) : Đây là đầu vào phụ hỗ trợ cho localvar vì localvar khơng
sử dụng cường độ nhiễu. Có kích thước bằng ảnh gốc của chúng ta.
• poisson : Sẽ khơng có tham số thứ 3 truyền vào. Trương trình sẽ tự hiểu loại
nhiễu này và tự động thêm cường độ nhiễu vào.
• AnhNhieu : Là một hình ảnh mới đã xử lý và bạn hồn tồn có thể hiện thị
ảnh nên GUI cũng như có thể xuất bản hình ảnh (hàm imwrite()) này.

7. Các hàm lọc nhiễu
7.1. Mean filtering (Bộ lọc trung bình)

Là thay thế mỗi giá trị điểm ảnh trong một hình ảnh với giá trị trung bình của
giá trị các điểm ảnh lân cận, trong đó có điểm ảnh đó. Đây là một bộ lọc tuyến
tính đơn giản với tác dụng làm mịn ảnh, khử nhiễu,.. Ví dụ về bộ lọc trung bình
với kernel 3x3:

=> 5+3+6+2+1+9+8+4+7 = 45
45/9 = 5
Bộ lọc trung bình hiệu quả nhất trong việc khử nhiễu Gaussian nhưng đổi lại là
sự mất các chi tiết hình ảnh cao tần. Kích thước kernel lớn hơn sẽ có hiệu quả lọc
lơn hơn nhưng làm giảm chất lượng hình ảnh nên lọc này khơng hiệu quả trong
việc khử nhiễu ‘salt and pepper’ . Một biến thể phổ biến khác của bộ lọc này là
tạo một ngưỡng và chỉ thay thế các giá trị điểm ảnh hiện tại với giá trị trung bình
của vùng lân cận nếu độ lớn của giá trị trung bình nằm nằm dưới ngưỡng này.

12


7.2. Median filtering ( Lọc trung vị)
- Bộ lọc thường được sử dụng trong xử lý ảnh. Lọc Median vượt qua những hạn
chế của bộ lọc Mean. Bộ lọc này thay thế điểm ảnh đích bằng giá trị trung vị của
các điểm ảnh lân cận và chính điểm ảnh đó. Bộ lọc Median sẽ tìm giá trị trung vị
trong tất cả các điểm anh và thay vào điểm ảnh trung tâm. Các bộ lọc trung vị là
cấp trên bộ lọc trung bình ở chỗ nó giữ độ nét tần số cao trong khi vẫn loại bỏ
nhiễu.
7.3.Lọc Gaussian
- Bộ lọc Gaussian rất quan trọng đối với cả lý thuyết và thực tiễn. Chúng ta lọc
hình ảnh bằng cách sử dụng một kernel dạng đối xứng xuyên tâm của hàm Gauss
2-D liên tục được xác định như sau:

Xấp xỉ rời rạc để hàm liên tục này sử dụng hai tham số tự do là :

(1) các kích thước mong muốn của các kernel (như là một mặt nạ lọc N × N);
(2) giá trị độ lệch chuẩn của hàm Gaussian.
- Ứng dụng của bộ lọc Gaussian là làm mịn ảnh, nó khác với bộ lọc trung bình ở
chỗ là:
+ Thứ nhất: mức độ làm mịn được điều khiển bởi sự lựa chọn các tiêu chuẩn
thông số độ lệch, chứ không phải bởi giá trị tuyệt đối của kích thước hạt nhân.
+ Thứ 2: hàm Gaussian có một thuộc tính khá đặc biệt, đó là biến đổi Fourier của
nó là một hàm Gaussian, điều đó rất thuận tiện cho việc phân tích miền tần số
của bộ lọc.

13


Hình 4: Bộ lọc Gaussian

Một hàm Gauss với giá trị lớn của s là một ví dụ về bộ lọc thơng thấp, trong đó
thành phần tần số cao (ví dụ: các tính năng cạnh sắc nét) của hình ảnh được loại
bỏ.
8. Phép biến đổi RADON
Phép biến đổi Radon, được thực hiện bởi hàm radon trong MATLAB, biểu diễn
ảnh dưới dạng các hình chiếu của nó dọc theo các hướng xác định. Hình chiếu
của một hàm hai biến f(x,y) là một tập hợp các tích phân đường. Hàm radon tính
các tích phân đường từ nhiều điểm nguồn dọc theo các đường dẫn song song, gọi
là các tia chiếu (beam), theo một hướng xác định nào đó. Các tia chiếu này nằm
cách nhau 1 pixel. Để biểu diễn toàn bộ ảnh, hàm radon sẽ lấy nhiều hình chiếu
song song của ảnh từ các góc quay khác nhau bằng cách xoay các điểm nguồn
quanh tâm của ảnh.

14



Ví dụ, tích phân đường của f(x,y) theo hướng thẳng đứng chính là hình chiếu của
f(x,y) trên trục x, cịn tích phân đường của f(x,y) theo hướng nằm ngang chính là
hình chiếu của f(x,y) trên trục y (hình b).
Tổng quát, biến đổi Radon của f(x,y) ứng với góc quay θ là tích phân đường của
f dọc theo trục y’:

Trong đó (x’,y’) là hệ trục toạ độ có được bằng cách xoay hệ trục (x,y) đi một
góc bằng θ:

Trong MATLAB, biến đổi Radon được tính bằng hàm radon với cú pháp như
sau: [R,Xp] = radon(I,theta)
Trong đó: theta: là một vector gồm các góc quay cần tính biến đổi Radon
15


R: là một ma trận mà mỗi cột của nó là biến đổi Radon R(x’) ứng
một góc quay theta.

với

Xp: là vector chứa các toạ độ x’ tương ứng (Xp là như nhau đối với
mọi góc quay theta).

III. Các phương pháp tái tạo ảnh
1. Phương pháp tái tạo ảnh đại số
- Đối tượng tạo ảnh được xem như bao gồm nhiều đối tượng ảnh điểm. Một
số hữu hạn ảnh điểm tương ứng với số lượng gần đúng dữ liệu đo. Những
chuyển động quét thẳng xảy ra với một số lượng hữu hạn hóc khơng gian bằng
nhau và với 1 hướng chiếu đã xác định trước thì giá trị đo sẽ xác định với một

số lượng hữu hạn vị trí của cụm đo.
- Nguyên lý:
+ Trong 1 chu kì lặp lại, những dữ liệu của một ảnh được tái tạo gần đúng sẽ
được đem so sánh với dữ liệu thực theo cùng phương chiếu và cùng số phần
tử nằm trên phương chiếu.
+ Sự chênh lệch hiệu số của hai tập dữ liệu sẽ được đem chiếu ngược lại vào
ma trận ảnh để tạo ra ảnh gần đúng.
+ Khi toàn bộ các tập dữ liệu từ các hướng chiếu đã được sử dụng, một chu
kỳ lặp đã được hoàn tất và một chu kì tính tốn lặp mới được bắt đầu sử dụng
kết quả của chu trình lặp trước.
Ví dụ: Tạo ảnh 1 đối tượng chỉ bao gồm 9 ảnh điểm với các độ suy giảm tương
ứng: 0,9,5,7,7,1,2,5,8.
Sau 4 lần quét ngang, dọc, chéo ta thu được tập các dữ liệu tương ứng:
|15,15,15|, |2,12,15,10,6|, |9,21,15| và |0,16,15,6,8|.
Dựa trên nguyên tắc này, bắt đầu thu tập dữ liệu chiếu ngang trên hình vẽ, vì
số lượng phần tử theo hướng chiếu này là 3 cho mọi phép chiếu nên từng số

16


đo của tập dữ liệu này sẽ được chia cho 3 rồi chiếu lại vào mà trận rỗng cũng
gồm 9 phần tử, kết quả ta được ma trận gồm 9 phần tử có cùng giá trị 5.

Hình 6: Mơ hình các bước tái tạo ảnh

Sau tập dữ liệu ngang là tập dữ liệu chéo phải, vì vậy ta phải chiếu chéo
phải ma trận ảnh điểm (b) và nhận được tập dữ liệu gồm 5 phần tử
[5,10,15,10,5]. Lấy hiệu của tập dữ liệu chéo này ta được một tập dữ liệu chéo
phải mới [-3,2,0,0,1]. Chia từng giá trị của tập dữ liệu mới này cho số phần tử
nằm trên đường chéo phải: -3:1, 2:2, 0:3, 0:2, 1:1 rồi cộng với từng phần tử

nằm trên đường chéo của ma trận (b) sẽ đươc ma trận (c) :[5,5,6], [6,5,5],
[2,6,5].
Bây giờ sẽ sử dụng tập dữ liệu của số đo phương chiếu dọc, lấy hiệu của tập
dữ liệu gốc và tập dữ liệu của ma trận c được tập dữ liệu [4,5,-1], chia từng
17


giá trị của tập dữ liệu mới này cho 3 và cộng với ma trận (c) ta được ma trận
(d).
Tiếp đến sử dụng tập dữ liệu chéo trái theo phương pháp tương tự ta có được
kết quả của chu kỳ tính lặp lần 1 là ma trận (e) với giá trị là: [0,9,6.3],
[7,7.3,1.5], [1.3,4.5,8]
Một số giá trị trong ma trân (e) chưa thỏa mãn độ chính xác, ví dụ 1.5 so với
1, 4.5 so với 5…Vì vậy phải thực hiện một số chu kỳ lặp tiếp theo, xuất phát
từ dữ liệu của ma trận kết quả của chu kỳ lặp trước.
 Kết quả sau 3 chu kỳ lặp đạt được ma trân (g), phản ánh trung thực hình
ảnh đối tượng.
- Ưu điểm: đây là một phương pháp tái tạo ảnh số khá chính xác.
Tuy nhiên hiện nay phương pháp này hầu như khơng sử dụng vì lí do sau:
+ Việc tính tốn chỉ thực hiện được khi đã thu thập được đầy đủ các số liệu
quét vì vậy phải tốn thời gian đợi rất nhiều;
+ Khoảng thời gian dành cho tính tốn nhiều so với phương pháp concolution
khi số lượng ản điểm tăng cao;
Các phương pháp tái tạo ảnh đang ngày càng được mở rộng sang nhiều lĩnh
vực ứng dụng khác nhau như y học hạt nhân và siêu âm chuẩn đoán. Trong
lĩnh vưc này, những sự kiện toán học cho phương pháp concolution lại không
được thỏa mãn.
- Nhược điểm:
+ Việc tính tốn chỉ thực hiện khi đã thu thập được đầy đủ các số liệu quét vì
vậy phải tốn thời gian đợi rất nhiều.

+ Khơng lọc được nhiễu vì chỉ tồn tại trong miền thời gian.
2. Phương pháp chiếu ngược có lọc
Thuật tốn chiếu ngược lọc có cơ sở là thuật tốn khai triển Fourier với bộ lọc
thích hợp để “làm trơn” dữ liệu hình chiếu trước khi áp dụng cách thức chiếu
ngược. Những hàm lọc thông dụng nhất là các hàm lọc cao tần để giảm nhiễu
và làm trơn hình ảnh, và các hàm lọc thấp tần. Ngồi ra, thuật tốn này cịn sử
dụng một chuỗi các phương pháp tốn học khác trong q trình tái cấu trúc:
cuộn chập, khai triển Hilbert, nội suy…

18


Hình 7: Nguyên tắc tái tạo ảnh tức thời (theo thời gian thực)

Hình 8: Qui trình tái tạo ảnh chiếu ngược có lọc

19


IV. Chương trình mơ phỏng
1. Giao diện

20


- Nội suy ảnh với phương pháp nội suy: nearest , hệ số nội suy n = 0.03

Hình 9: Ảnh gốc và ảnh nội suy = ½ ảnh gốc

2. Code Matlab

function varargout = ct(varargin)
% CT MATLAB code for ct.fig
%
CT, by itself, creates a new CT or raises the
existing
%
singleton*.
%
%
H = CT returns the handle to a new CT or the
handle to
%
the existing singleton*.
%
%
CT('CALLBACK',hObject,eventData,handles,...)
calls the local
21


%
function named CALLBACK in CT.M with the given
input arguments.
%
%
CT('Property','Value',...) creates a new CT or
raises the
%
existing singleton*. Starting from the left,
property value pairs are

%
applied to the GUI before ct_OpeningFcn gets
called. An
%
unrecognized property name or invalid value
makes property application
%
stop. All inputs are passed to ct_OpeningFcn
via varargin.
%
%
*See GUI Options on GUIDE's Tools menu. Choose
"GUI allows only one
%
instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help ct
% Last Modified by GUIDE v2.5 16-May-2018 01:17:32
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @ct_OpeningFcn,
...
'gui_OutputFcn', @ct_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback',
[]);

if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State,
varargin{:});
22


else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before ct is made visible.
function ct_OpeningFcn(hObject, eventdata, handles,
varargin)
% This function has no output args, see OutputFcn.
% hObject
handle to figure
% eventdata reserved - to be defined in a future
version of MATLAB
% handles
structure with handles and user data (see
GUIDATA)
% varargin
command line arguments to ct (see
VARARGIN)
% Choose default command line output for ct
handles.output = hObject;
% Update handles structure

guidata(hObject, handles);
% UIWAIT makes ct wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the
command line.
function varargout = ct_OutputFcn(hObject, eventdata,
handles)
% varargout cell array for returning output args (see
VARARGOUT);
% hObject
handle to figure
% eventdata reserved - to be defined in a future
version of MATLAB
% handles
structure with handles and user data (see
GUIDATA)

23


% Get default command line output from handles
structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata,
handles)
% hObject
handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future
version of MATLAB

% handles
structure with handles and user data (see
GUIDATA)
global AG;
global BG;
[filename path]=uigetfile({'*.jpg';'*.ppm'});
full=strcat(path,filename);
AG = imread(full);
axes(handles.axes1);
thongtin=imfinfo(full)
set(handles.chieudai,'string',thongtin.Width);
set(handles.chieucao,'string',thongtin.Height);
%phantom(128);
BG = rgb2gray(AG);
imshow(BG)

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata,
handles)
% hObject
handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future
version of MATLAB
% handles
structure with handles and user data (see
GUIDATA)
global BG
x = get(handles.edit23,'string');
x = str2num(x);
X=imrotate(BG,x);

24


axes(handles.axes1);
imshow(BG)
figure
imshow(X)
% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata,
handles)
% hObject
handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future
version of MATLAB
% handles
structure with handles and user data (see
GUIDATA)
% Hints: contents = cellstr(get(hObject,'String'))
returns popupmenu1 contents as cell array
%
contents{get(hObject,'Value')} returns
selected item from popupmenu1
loainhieu = get(handles.popupmenu1,'value');
switch loainhieu
case 3
set(handles.edit3,'visible','off');
set(handles.text4,'visible','off');
case 4
set(handles.edit3,'visible','off');
set(handles.text4,'visible','off');

otherwise
set(handles.edit3,'visible','on');
set(handles.text4,'visible','on');
end
% --- Executes during object creation, after setting
all properties.
function popupmenu1_CreateFcn(hObject, eventdata,
handles)
% hObject
handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future
version of MATLAB
% handles
empty - handles not created until after
all CreateFcns called
25


×