허프만 변환 관련 질문
3 views (last 30 days)
Show older comments
결과가... 이상하게 나옵니다..
<주어진 함수 코드>
function res = hough2(image)
% input parameter is image
edges = edge(image,'canny');
[x,y] = find(edges);
angles=[-90:180]*pi/180;
r=int16(floor(x*cos(angles) + y*sin(angles)));
rmax = max(r(find(r>0)));
acc=zeros(rmax+1,270);
for i=1:length(x)
for j=1:270
if r(i,j) >=0
acc(r(i,j)+1,j) = acc(r(i,j)+1,j) + 1;
end
end
end
res = acc;
end
````````````````````````
function houghline(image,r,theta)
%UNTITLED3 이 함수의 요약 설명 위치
% 자세한 설명 위치
[x,y] = size(image);
angle = pi*(181-theta)/180;
X = [1:x];
if sin(angle) == 0
line([r r], [0,y],'Color','red');
else
line([0,y],[r/sin(angle),(r-y*cos(angle))/sin(angle)],'Color','red');
end
```````````````````````````````````````
<제가 작성한 코드>
%% Hough Transform
normalneck = imread('normalneck.PNG');
normalneck = im2gray(normalneck); % 안하면 차원 오류남.
textneck = imread('textneck.PNG'); % 거북목 증후군
textneck = im2gray(textneck);
% Apply Hough Transform
h1 = hough2(normalneck); figure, imshow(mat2gray(h1)*1.5);title('Hough1');
h2 = hough2(textneck); figure, imshow(mat2gray(h2)*1.5);title('Hough2');
sorted_h1 = sort(h1(:), 'descend');
sorted_h2 = sort(h2(:), 'descend');
figure, imshow(normalneck); hold on;
for i = 1:100
[r, theta] = find(h1 == sorted_h1(i));
houghline(normalneck, r, theta);
end
hold off;
figure, imshow(textneck); hold on;
for i = 1:100
[r, theta] = find(h2 == sorted_h2(i));
houghline(textneck, r, theta);
end
hold off;
``````````````````````````````````````
위의 코드를 실행하면,
-> 다음 사용 중 오류가 발생함: line
벡터들의 길이는 같아야 합니다.
오류 발생: houghline (11번 라인)
line([0,y],[r/sin(angle),(r-y*cos(angle))/sin(angle)],'Color','red');
이런 오류가 발생하면서 정답과는 다른 결과가 나옵니다...
어떻게 해결할 수 있을까요? ㅠㅠㅠ
0 Comments
Accepted Answer
Angelo Yeo
on 16 Nov 2023
[r, theta] = find(h2 == sorted_h2(i)); 의 결과로 여러 개의 r과 theta가 나올 수 있게 때문에 현재 에러가 발생하는 것으로 보입니다. 아래와 같이 코드를 수정해볼 수 있습니다.
%% Hough Transform
% normalneck = imread('normalneck.PNG');
% normalneck = im2gray(normalneck); % 안하면 차원 오류남.
textneck = imread('mypic.png'); % 거북목 증후군
textneck = im2gray(textneck);
% Apply Hough Transform
% h1 = hough2(normalneck); figure, imshow(mat2gray(h1)*1.5);title('Hough1');
h2 = hough2(textneck); % figure, imshow(mat2gray(h2)*1.5);title('Hough2');
sorted_h2 = sort(h2(:), 'descend');
figure, imshow(textneck); hold on;
for i = 1:100
[r, theta] = find(h2 == sorted_h2(i));
% There may be multiple r's and theta's
for i_r = 1:length(r)
houghline(textneck, r(i_r), theta(i_r));
end
end
hold off;
function res = hough2(image)
% input parameter is image
edges = edge(image,'canny');
[x,y] = find(edges);
angles=[-90:180]*pi/180;
r=int16(floor(x*cos(angles) + y*sin(angles)));
rmax = max(r(find(r>0)));
acc=zeros(rmax+1,270);
for i=1:length(x)
for j=1:270
if r(i,j) >=0
acc(r(i,j)+1,j) = acc(r(i,j)+1,j) + 1;
end
end
end
res = acc;
end
function houghline(image,r,theta)
%UNTITLED3 이 함수의 요약 설명 위치
% 자세한 설명 위치
[x,y] = size(image);
angle = pi*(181-theta)/180;
X = [1:x];
if sin(angle) == 0
line([r r], [0,y],'Color','red');
else
line([0,y],[r/sin(angle),(r-y*cos(angle))/sin(angle)],'Color','red');
end
end
2 Comments
More Answers (0)
See Also
Categories
Find more on Hough Transform in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!