removing border pixels in a binary image

5 次查看(过去 30 天)
Hello all, below is a binary image
i want to remove the border pixels as shown in red (i used paint to highlight ) in the below image
I cannot use imclearborder for this task as it eliminates any pixel attactched to the border too. So i was thinking we could write a loop and set the first and last white oixel in each row to zero. I am not quite sure how to write the loop. Can anyone help me with this problem?
  9 个评论
Apoorva Maiya
Apoorva Maiya 2020-5-15
hey, below is the same image after skeletonization
I have managed to get the rightmost and leftmost white pixel in each row with the following code:
B = bwskel(img);
[rows,col]=size(B);
rightEdgeColumn = zeros(1,rows);
leftEdgeColumn=zeros(1,rows);
for row=1:rows
col1 = find(B(row, :), 1, 'last');
col2 = find(B(row, :), 1, 'first');
if ~isempty(col1) && ~isempty(col2)
rightEdgeColumn(row) = col1;
leftEdgeColumn(row) = col2;
end
end
Can anybody help me set those pixels to zero? I want the pixels in rightEdgeColumn and LeftEdgeColumn to be zero. Thank you in advance.
Apoorva Maiya
Apoorva Maiya 2020-5-17
thank you all for your response, i was able to write the code myself.

请先登录,再进行评论。

采纳的回答

Apoorva Maiya
Apoorva Maiya 2020-5-17
B = bwskel(img); %skeletonized image
[rows,col]=size(B);
%% finding right edge and left edge
rightEdgeColumn = zeros(1,rows);
leftEdgeColumn=zeros(1,rows);
for row=1:rows
col1 = find(B(row, :), 1, 'last');
col2 = find(B(row, :), 1, 'first');
if ~isempty(col1) && ~isempty(col2)
rightEdgeColumn(row) = col1;
leftEdgeColumn(row) = col2;
end
end
%%removing the edge pixels
for i=1:length(rightEdgeColumn)
k=rightEdgeColumn(i);
if k==0 %% if the whole row has no white pixels
B(i,:)=0;
else
B(i,k)=0;
end
end

更多回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by