필터 지우기
필터 지우기

Why is the entire image copied instead of the axes only?

조회 수: 3 (최근 30일)
Faraz
Faraz 2014년 3월 17일
댓글: Faraz 2014년 3월 19일
What I have is a plot showing the area of connected components. What I want to do is to further work on the plot figure such as clean it up a bit or ``imcomplement`` it etc. and then be able to apply the axes from the original plot to this image and be able to extract the ``ylabel``.
Let me explain the above issue with my code and some examples.
This is the plot I have, the y-axis represents the object areas. This is the important axis that I want to transfer to the new image.
Since I am interested in the axes only I copy that using
h = findobj(gcf,'type','axes');
So that I can work with the figure without the axes and borders interfering I save it without these attributes
set(gca, 'visible', 'off'); % Hide the axis and borders
hgexport(gcf, 'plot1.jpg', hgexport('factorystyle'), 'Format', 'jpeg');
This is what I get:
So far so good.
Now comes the processing or in other words changing the plot to my needs.
plot_img = rgb2gray(imread('plot1.jpg'));
img_bw_plot = im2bw(plot_img, graythresh(plot_img));
[rows cols] = size(plot_img);
new = zeros(size(plot_img));
for i = 1: rows
for j = 1: cols
if (img_bw_plot(i,j) == 0)
new(i, 1:10) = 255;
end
end
end
f = figure;
imshow(new);
copyobj(h,f)
This produces a weird overlapped image where instead of copying only the axes, the entire image is copied on top of the ``new``. The ``datacursormode`` also fails to work beyond the over lapping image.

채택된 답변

Image Analyst
Image Analyst 2014년 3월 17일
I really don't understand what you want to do. What or where is this "ylabel" that you want to extract? Do you mean the tick labels on the y axis? And I don't know why you want to treat a plot of markers (diamonds?) as if it were an image. And I don't know what you are hoping to do with the "new" matrix.
Why don't we take a step back and start with the original x,y data you plotted. You say you have a "plot showing the area of connected components." I guess x is the blob number, and y is the area of the blob. Now, what do you want to do with that?
  댓글 수: 7
Image Analyst
Image Analyst 2014년 3월 18일
Instead of plotting those points with plot() or scatter() or whatever you used, why don't you just set pixels in an array (an image) and just use regular image processing methods?
Faraz
Faraz 2014년 3월 19일
Yes, I will look into it. That looks to be the best option. Since the area are plotted on the y-axis, I used this code to trasfer that to a vector where the area is the vector index. I am setting that pixel to white.
area = [stats.Area];
normalized_area = area/norm(area);
figure(1), plot(5, area(:),'.');
axis([0 300 0 6000]);
for k = 1: length(area)
test(area(k)) = 255;
end
Now what I have to do is to search for continuous "255" in the vector and that will be my blob.
Is this what you had in mind? with writing it directly to an array or is there a better way to do it?

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Visual Exploration에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by